Mod-umschreibt auf Apache: alle URLs ändern
-
01-07-2019 - |
Frage
Im Moment bin ich etwas zu tun, wie folgt aus:
RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php
Ich würde viel lieber eine Regeln, die die gleiche Sache für jede URL tun würde, also muss ich nicht halten sie jedes Mal, wenn ich fügen Sie eine neue Datei hinzugefügt wird.
Auch Ich mag Dinge passen wie ‚/ config / new‘ auf ‚config_new.php‘, wenn das möglich ist. Ich vermute, einige regexp würde lassen Sie mich dies erreichen?
Lösung
Versuchen:
RewriteRule ^ /? (\ W +) /? $ $ 1.php
der $ 1 der Inhalt des ersten erfassten Zeichenkette in Klammern. Die Klammern um den zweiten Schrägstrich sind nicht erforderlich.
edit: Für das andere Spiel, versuchen Sie dies:
RewriteRule ^ /? (\ W +) / (\ w +) /? $ $ $ 1_ 2.php
Andere Tipps
Ich würde so etwas tun:
RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php
Ich bevorzuge es explizit die URL der Liste I übereinstimmen soll, so dass ich muß, um PHP-Dateien keine Sorgen über statische Inhalte oder das Hinzufügen neue Dinge später, die nicht müssen neu geschrieben werden.
Die oben ist in Ordnung, wenn alle Unter URLs gelten für alle URL root (book/new
, movie/new
, user/new
), aber nicht so gut, wenn man verschiedene Unter URLs je nach Root-Aktion (logout/new
machen nicht viel Sinn) haben wollen . Sie können damit umgehen entweder mit einer komplexeren regex, oder alles auf eine einzige PHP-Datei Routing, welche Dateien zu schließen und die Anzeige wird bestimmen, was auf der Grundlage der URL.
Mod Rewrite nicht tun kann (potentiell) grenzenlos ersetzt, wie Sie im zweiten Teil Ihrer Frage tun mögen. Aber überprüfen an der Unterseite des externen Rewriting Engine aus der Apache URL-Manipulation :
Externe Rewriting Engine
Beschreibung:
A FAQ: Wie können wir die foo / bar / quux / etc lösen. Problem? Es scheint, durch die Verwendung von mod_rewrite keine Lösung ... Lösung:
Verwenden eines externen RewriteMap, das heißt ein Programm, das wie ein RewriteMap wirkt. Es wird ausgeführt, sobald beim Start von Apache die angeforderten URLs auf STDIN und hat die resultierenden (in der Regel neu geschrieben) URL auf STDOUT (Reihenfolge!) Setzen.
RewriteEngine on RewriteMap quux-map prg:/path/to/map.quux.pl RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1} #!/path/to/perl # disable buffered I/O which would lead # to deadloops for the Apache server $| = 1; # read URLs one per line from stdin and # generate substitution URL on stdout while (<>) { s|^foo/|bar/|; print $_; }
Dies ist eine Demonstration Nur-Beispiel und schreibt nur alle URLs / ~ quux / foo / ... zu / ~ quux / bar / .... Eigentlich kann man programmieren, was auch immer Sie mögen. Aber beachten Sie, dass während solcher Karten können auch von einem durchschnittlichen Benutzer verwendet werden, wird nur der Systemadministrator festlegen können.