2011-11-25 17 views
16

Digamos que quiero codificar un título de artículo en una URL y que contiene una barra inclinada. Si el URL codificar el título del artículo me sale:NGINX unescapes% 2f a una barra diagonal. ¿Cómo puedo detenerlo?

http://example.com/articles/foo%2fbar/view/ 

Nginx pasa esto a mi aplicación FastCGI como:

http://example.com/articles/foo/bar/view/ 

Qué lugar arruina la idea.

noto que si nginx está sirviendo a un archivo, por ejemplo /path/to/page.html, a continuación, se puede llegar por cualquiera de las siguientes dos direcciones URL:

http://example.com/path/to/page.html 
http://example.com/path/to%2fpage.html 

Sin embargo, este no es el caso para (por ejemplo) Apache.

¿Hay alguna manera de solucionar este problema?

He intentado los documentos y Google sin suerte.

Gracias.

ACTUALIZACIÓN

nginx config:

worker_processes 1; 
pid ./nginx.pid; 
events { 
    worker_connections 1024; 
} 
http { 
    server_tokens off; 
    server { 
     listen 80; 
     server_name localhost; 
     location /mysite/{ 
      fastcgi_pass unix: ./mysite.fcgi.socket; 

      fastcgi_param SERVER_NAME $server_name; 
      fastcgi_param SERVER_PORT $server_port; 
      fastcgi_param SERVER_PROTOCOL $server_protocol; 
      fastcgi_param SCRIPT_NAME "/mysite/"; 
      fastcgi_param PATH_INFO $fastcgi_path_info; 
      fastcgi_param REQUEST_METHOD $request_method; 
      fastcgi_param QUERY_STRING $query_string; 
      fastcgi_param CONTENT_TYPE $content_type; 
      fastcgi_param CONTENT_LENGTH $content_length; 
      fastcgi_pass_header Authorization; 
      fastcgi_intercept_errors off; 
     } 
    } 

} 
+0

¿Cómo es tu config nginx como? – Amber

+0

Ver también https://stackoverflow.com/a/37584637/873282 – koppor

Respuesta

2

Intenta escapar "%" como "25%"

http://example.com/articles/foo%252fbar/view/ 
+0

No es una mala idea (+1), aunque se siente como intentar arreglar el bit equivocado. (Cambiando mi escape/unescaping en lugar de cambiar el comportamiento de nginx) – DaedalusFall

+1

Bueno, puedes implementar este cambio bastante sencillo o intentar cambiar el código del núcleo. Mire cómo fluye la marea y trabaje con ella o intente cambiar la marea. Se trata de elecciones. – Dayo

+0

:-) Esperaba que fuera un cambio simple en el archivo de configuración. Resultó que descubrí que pasar $ uri para PATH_INFO funciona, pero tienes que quitar las cosas del código en el extremo, así que esto también parece ser algo incorrecto de arreglar. Pero como dices, mareas ... si no hubiera encontrado $ uri probablemente implementaría tu idea de% 252f. – DaedalusFall

0

que no tendrá ningún problema, si se utiliza el URL parámetros de consulta Cuando usted puede controlar sus servidores rutas que podría ir para:

http://example.com/articles/view/?path=foo%2fbar

y nginx no tocará% 2F

Cuestiones relacionadas