2010-12-01 15 views
5

tengo servicio web que tiene varios parámetros de filtro, algo así como:nginx: Cómo mantener dobles barras diagonales en las URL

http://mydomain.com/filter1/value1/filter2/value2/filter3/value3 

Lo complicado es a veces algunas de las variables de filtro están ausentes, por lo que las direcciones URL como tales podrían pueden pasar a este servicio:

http://mydomain.com/filter1//filter2//filter3/value3 

ahora tengo que configurar mi nginx (o fastcgi) para mantener las barras dobles. Actualmente está reemplazando barras diagonales dobles por otras simples. Soy nuevo en nginx & configuración fastcgi y no sé cómo hacer eso. Me capturaron el request_uri de mi script php cuando solicité la segunda url, y llegué

http://mydomain.com/filter1/filter2/filter3/value3 

PLZ me ayude. Gracias por adelantado.

+1

lo siento, tal vez la pregunta se ajusta mejor a ServerFault.com, ¿alguien podría ayudarme a transferirla allí? – Shawn

+0

¡NO OLVIDES eliminar las barras inclinadas de tus proxy_pass'es !! No funcionará de lo contrario (nginx 1.8.1). – outluch

Respuesta

14
syntax: merge_slashes [on|off] 
default: merge_slashes on 
context: http, server 

Debe usar: merge_slashes off;

+0

Thx. Pero, ¿dónde encontraste la documentación? ¿Podría darme un enlace por favor? Busqué en Google "nginx merge_slashes" pero no obtuve nada de la documentación. – Shawn

+0

Mi idioma nativo es el ruso, entonces lo encontré aquí: http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html – CyberDem0n

+0

Y acabo de probarlo, pero parece que no funciona. Agregué merge_slashes apagado; inside server {...} – Shawn

4

Tuve un problema similar con nginx + pasajero (para Ruby on Rails/Rack/etc.), y confirmo que, por defecto, múltiples barras se colapsaron (en ambos PATH_INFO y REQUEST_URI).

Añadiendo merge_slashes off; en el contexto server de la configuración de nginx lo arregló (ahora veo varias barras oblicuas).

1

Además, asegúrese de no tener una barra inclinada en la línea proxy_pass.

  • BUENA: proxy_pass http://localhost:3000;

  • MALO: proxy_pass http://localhost:3000/;

+0

WOW, vi su respuesta accidentalmente y por curiosidad decidí no hacer ninguna barra en mi proxy_pass. ¡¡Y funcionó!! Debería estar en la primera respuesta OBVIAMENTE. Lo agrego a la sección de comentarios para esa respuesta – outluch

0

De acuerdo con las respuestas anteriores, la solución es utilizar merge_slashes off; en su configuración de Nginx. Sin embargo, si usa hosts virtuales, parece que necesita incluirlo en su primer host. Ese es el caso en v1.4.1 y v1.4.6.

Cuestiones relacionadas