2008-11-11 10 views
11

Je suis à la recherche de convertir la règle mod_rewrite suivante au Nginx equivalent:Comment convertir mod_rewrite (option QSA) en équivalent Nginx?

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

Jusqu'à présent, j'ai:

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

Le problème est (je pense!) Que la chaîne de requête ne être ajouté Je n'ai pas trouvé un moyen de porter l'argument QSA à Nginx.

Répondre

5

Ces règles de réécriture fait les scripts fonctionnent:

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

QSA est automatique Nginx.

Si vous ne le voulez pas, ajoutez? à la fin de votre nouvel emplacement

réécrire ^/foo /bar/index.php? dernier;

+0

commentaire supprimé – Zoltan

+1

Ceci est correct. Les docs (à http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) disent: "Si une chaîne de remplacement inclut les nouveaux arguments de requête, les arguments de requête précédents sont ajoutés après eux." (Remarque: "Si cela n'est pas souhaité, l'ajout d'un point d'interrogation à la fin d'une chaîne de remplacement évite de les ajouter") – Zoltan

Questions connexes