2008-11-11 10 views
11

szukam przekonwertować następujące mod_rewrite regułę do Nginx equivalent:Jak przekonwertować mod_rewrite (opcja QSA) na odpowiednik Nginx?

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

Do tej pory mam:

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

Problem jest (myślę!), Że ciąg kwerendy nie robi dołączać. Nie znalazłem sposobu na przesłanie argumentu Nginx do argumentu QSA.

Odpowiedz

5

Te zasady przepisujące wykonane skrypty działają:

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

QSA jest automatyczna w nginx.

Jeśli nie chcesz tego, dodaj? na końcu nowej lokalizacji

przepisać ^/foo/bar/index.php? ostatni, ubiegły, zeszły;

+0

komentarz usunięty – Zoltan

+1

To się zgadza. Dokumenty (na http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) mówią: "Jeśli zastępczy ciąg zawiera nowe argumenty żądania, poprzednie argumenty żądania są dołączane po nich." (Uwaga: "Jeśli jest to niepożądane, umieszczenie znaku zapytania na końcu zastępczego ciągu znaków zapobiega ich dołączaniu") – Zoltan