2011-11-25 4 views
16

Dire che voglio codificare un titolo di articolo in un URL e che contiene una barra. Se io URL codificare il titolo dell'articolo ottengo:NGINX esegue il escape di% 2f su una barra. Come posso fermarlo?

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

Nginx passa questo al mio applicazione FastCGI come:

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

Quali invece rovina l'idea.

ho notato che se Nginx è al servizio di un file, dicono /path/to/page.html, allora può essere raggiunto in una delle seguenti due URL:

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

Tuttavia questo non è il caso per (ad esempio) Apache.

C'è un modo per risolvere questo comportamento?

Ho provato i documenti e Google senza fortuna.

Grazie.

UPDATE

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

cosa fa il tuo config nginx assomigliare? – Amber

+0

Vedere anche https://stackoverflow.com/a/37584637/873282 – koppor

risposta

2

Prova fuga "%" come "% 25"

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

Non è una cattiva idea (+1), anche se sembra come provare a correggere il bit sbagliato. (Cambiare la mia escaping/unescaping piuttosto che modificare il comportamento di nginx) – DaedalusFall

+1

Bene, è possibile implementare questo cambiamento piuttosto semplice o impostare sul tentativo di modificare il codice di base. Guarda come fluisce la marea e lavora con essa o prova a cambiare la marea. Si tratta di scelte. – Dayo

+0

:-) Speravo piuttosto che sarebbe stata una semplice modifica del file di configurazione. Come si è scoperto, ho scoperto che passare $ uri per PATH_INFO funziona, ma è necessario rimuovere la roba dalla coda nel codice, quindi anche questa sembra la cosa sbagliata da risolvere. Ma come dici tu, maree ... se non avessi già trovato $ uri probabilmente avrei implementato la tua idea di% 252f. – DaedalusFall

0

non avrete alcuna difficoltà, se si utilizza URL parametri di query. Quando è possibile controllare i server percorsi si potrebbe andare per:

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

e nginx non toccherai% 2f