2012-10-13 4 views
25

Ich möchte eine URL zu einer anderen Seite mod_rewrite, aber ich möchte auch alle Abfragezeichenfolgen beibehalten werden.Wie kann ich mod_rewrite und Abfragezeichenfolgen behalten?

RewriteEngine On 

#enforce trailing slashes 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !# 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://localhost/siteroot/$1/ [L,R=301] 

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 

Also, wenn ein Nutzer besucht apps/app1/ wird index.php?app=app1 gezeigt. Ich möchte jedoch optionale Abfragezeichenfolgen beibehalten können, so dass apps/app1/?variable=xindex.php?app=app1&variable=x zurückgibt.

Welche mod_rewrite Regel/Bedingung würde dies passieren?

Antwort

49

Sie benötigen die [QSA] flag ("Query-String Append")

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 [L,QSA] 

Für Seite 301 leitet mit der [R] Flag hinzuzufügen, wie interne umschreibt wie dieser Gegensatz wird die Query-String automatisch angehängt. Sie müssen es jedoch mit [QSA] für das interne Neuschreiben erzwingen.

+0

Danke, ich wusste nicht, dass es so einfach war. –

+1

+1 Zustimmen mit @DanielOakey .. Ich habe versucht, etwas mit Regex zu hacken und es hat nicht funktioniert .. –

+2

Um zu klären, es geht nicht um Umschreibungen vs Weiterleitungen. http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa sagt: Wenn der Ersatz-URI eine Abfragezeichenfolge enthält, ist das Standardverhalten von RewriteRule, die vorhandene Abfragezeichenfolge zu verwerfen und sie zu ersetzen mit dem neu erzeugten. Wenn Sie das [QSA] -Flag verwenden, werden die Abfragezeichenfolgen kombiniert. –