2008-11-11 4 views
11

Estoy buscando para convertir el mod_rewrite regla siguiente al Nginx equivalent:¿Cómo convierto mod_rewrite (opción QSA) a Nginx equivalente?

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

Hasta ahora tengo:

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

El problema es (creo!) Que la cadena de consulta no lo hace obtener adjunto No he encontrado una forma de portar el argumento QSA a Nginx.

Respuesta

5

Estas reglas de reescritura hacen los scripts funcionan:

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

QSA es automática en Nginx.

Si no lo desea, agregue? al final de su nueva ubicación

reescribir ^/foo /bar/index.php? último;

+0

comentario eliminado – Zoltan

+1

Esto es correcto. Los documentos (en http://nginx.org/en/docs/http/ngx_http_rewrite_module.html) dicen: "Si una cadena de reemplazo incluye los nuevos argumentos de solicitud, los argumentos de solicitud anteriores se añaden después de ellos". (Nota: "Si no se desea, colocar un signo de interrogación al final de una cadena de reemplazo evita que se agreguen") – Zoltan