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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top