Quien encuentre esto en línea e intente copiar y pegar las respuestas sugeridas, tenga cuidado si está utilizando una configuración de Virtualbox con puertos personalizados. Tuve que cambiarlo para que sea, por ejemplo, rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;donde 4321 es el puerto externo de Virtualbox'd nginx al que se conecta mi navegador.
aexl
Respuestas:
6
Me gustaría sugerir este enfoque:
# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
Utiliza el comportamiento predeterminado de nginx: fusión de barras, por lo que no es necesario reemplazar las barras, simplemente redirigimos
'merge_slashes off' no hizo ninguna diferencia y no resultó en ningún cambio.
Anup Nair
1
¿Por qué no merge_slashes on;solo funciona? ¿Es nginx buggy?
Jonathan
1
@ Jonathan - Acabo de encontrar esto también. Según tengo entendido, eso merge_slashes onno hace lo que estás pensando. Básicamente le dice a nginx que tome // y / y /// como una barra oblicua (no fusionar y redirigir por sí mismo)
Andrew Newby
1
Hablo por experiencia de ejecutar múltiples servidores de producción y servidores de desarrollo para un equipo. No hagas esto en nginx. En su lugar, use su enrutador dentro de su servidor de aplicaciones (JS / PHP, etc.).
Nginx no es confiable para el trabajo sustantivo. Por ejemplo, los redireccionamientos, reescrituras y ifcláusulas no son deterministas si cambia su configuración para usar SSL, un proxy inverso, puertos ocultos, etc. Por lo tanto, es posible que funcione correctamente en un entorno, pero podría ser imposible trabajar en otro.
Apéguese a un lenguaje de programación adecuado para resolver problemas, incluso tan simple como fusionar barras dobles. Me lo agradecerás más tarde.
Si bien estoy de acuerdo con su opinión, creo que deberíamos dar a las personas la opción de formarse su propia opinión sobre el asunto. Prefiero Apache a Nginx, por la misma razón que la tuya. Tenga en cuenta que Apache mod_rewrite también se puede considerar como un lenguaje de programación simple. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
donde 4321 es el puerto externo de Virtualbox'd nginx al que se conecta mi navegador.Respuestas:
Me gustaría sugerir este enfoque:
Utiliza el comportamiento predeterminado de nginx: fusión de barras, por lo que no es necesario reemplazar las barras, simplemente redirigimos
encontrado aquí
fuente
proxy_pass
Encontré la respuesta de kwo a no funcionar. Mirando mi registro de depuración, esto es lo que sucede:
Encontré que esto funcionó para mí:
Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
fuente
Prueba esto:
Puede haber múltiples redirecciones para barras> 3 o múltiples grupos de barras.
fuente
merge_slashes on;
solo funciona? ¿Es nginx buggy?merge_slashes on
no hace lo que estás pensando. Básicamente le dice a nginx que tome // y / y /// como una barra oblicua (no fusionar y redirigir por sí mismo)Hablo por experiencia de ejecutar múltiples servidores de producción y servidores de desarrollo para un equipo. No hagas esto en nginx. En su lugar, use su enrutador dentro de su servidor de aplicaciones (JS / PHP, etc.).
Nginx no es confiable para el trabajo sustantivo. Por ejemplo, los redireccionamientos, reescrituras y
if
cláusulas no son deterministas si cambia su configuración para usar SSL, un proxy inverso, puertos ocultos, etc. Por lo tanto, es posible que funcione correctamente en un entorno, pero podría ser imposible trabajar en otro.Apéguese a un lenguaje de programación adecuado para resolver problemas, incluso tan simple como fusionar barras dobles. Me lo agradecerás más tarde.
fuente
Me gusta esta solución:
Ver https://stackoverflow.com/a/27071557/548473
fuente
URL example.com//dir1////dir2///dir3 y más Prueba esto, me está funcionando
merge_slashes off; ubicación ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
fuente