Frage

Ich suche Urls mit mehrere Teil neu zu schreiben. Eine Teilkette wird als ein Unterverzeichnis angefordert wird, während irgendwelche andere als normale Abfrage-String-Parameter angefordert werden.

Zum Beispiel würde Ich mag Urls umschreiben aus

http://www.mysite.com/mark/friends?page=2

http://www.mysite.com/friends.php?user=mark&page=2

Ich bin der Lage, dies mit Ausnahme der Fragezeichen Charakter zu erreichen. Hier ist meine Rewrite-Regel:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

Wenn ich das Fragezeichen zu jedem anderen Charakter ändere es funktioniert super. Es scheint, wie das Problem, dass das ist ‚?‘ Charakter wird fälschlicherweise als Beginn eines neuen Query-String interpretiert.

Ich brauche auf alle Parameter zu übergeben, die nach / user / Freunde erscheinen, wie ist. Wie kann ich das erreichen?

War es hilfreich?

Lösung

Sie sollten sein, den [QSA] Flag verwendet anstatt zu versuchen, die Abfragezeichenfolge neu zu schreiben. [QSA] geht auf dem Query-String an die URL neu geschrieben.

So Ihre Regel sollte wie folgt aussehen:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

Ihr Fall ist sehr ähnlich wie Beispiel rel="nofollow für die Verwendung des QSA-Flag im mod_rewrite Kochbuch gegeben.

Andere Tipps

Die Abfrage ist Teil des URL-Pfades nicht und kann daher nicht sein mit der RewriteRule Richtlinie verarbeitet. Dies kann nur mit der RewriteCond Richtlinie (siehe %{QUERY_STRING} erfolgen ).

Aber als Chad Birch sagte bereits es genügt th die QSA Flagge automatisch das Original angefordert zu erhalten Abfrage auf die neue URL angehängt.

Zusätzlich zur Verwendung des Neuschreibmarkierungsregister QSA, können Sie auch die Umgebungsvariable QUERY_STRING verwenden, wie unten dargestellt:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

Und die URL in Frage

http://www.example.com/mark/friends?page=2

wird neu geschrieben (wie angegeben):

http://www.example.com/friends.php?user=mark&page=2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top