2008-11-11 12 views
11

Ich suche die folgende mod_rewrite Regel auf die Nginx equivalent zu konvertieren:Wie konvertiere ich mod_rewrite (QSA-Option) in Nginx-Äquivalent?

RewriteRule ^foo/(.*)$ /bar/index.php?title=$1 [PT,L,QSA] 
RewriteRule ^foo/*$ /bar/index.php [L,QSA] 

Bisher habe ich:

rewrite ^foo/(.*)$ /bar/index.php?title=$1&$query_string last; 
rewrite ^foo/?$ /bar/index.php?$query_string break; 

Das Problem ist (glaube ich!), Dass die Query-String nicht angehängt werden. Ich habe keine Möglichkeit gefunden, das Argument QSA zu Nginx zu portieren.

Antwort

5

Diese Rewrite-Regeln gemacht die Skripte funktionieren:

rewrite ^/foo/([^?]*)(?:\?(.*))? /bar/index.php?title=$1&$2; 
rewrite ^/foo /bar/index.php; 
16

QSA ist automatisch in NGINX.

Wenn Sie es nicht wollen, fügen Sie hinzu? bis zum Ende Ihres neuen Standortes

umschreiben ^/foo /bar/index.php? letzte;

+0

Kommentar entfernt – Zoltan

+1

Dies ist korrekt. Die Dokumentation (unter http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) lautet: "Wenn eine Ersetzungszeichenfolge die neuen Anforderungsargumente enthält, werden die vorherigen Anforderungsargumente nach ihnen angefügt." (Hinweis: "Wenn dies nicht erwünscht ist, wird durch ein Fragezeichen am Ende eines Ersetzungsstrings vermieden, dass sie angehängt werden.") – Zoltan