Supposons que je veuille encoder un titre d’article dans une URL et qu’il contienne une barre oblique. Si je URL encoder le titre de l’article, j’ai:
http://example.com/articles/foo%2fbar/view/
NGINX transmet cela à mon application FastCGI en tant que:
http://example.com/articles/foo/bar/view/
Ce qui gâche plutôt l’idée.
Je remarque que si NGINX sert un fichier, disons /path/to/page.html, alors il peut être atteint par l’une des deux URL suivantes:
http://example.com/path/to/page.html http://example.com/path/to%2fpage.html
Cependant, ce n’est pas le cas pour (par exemple) Apache.
Est-il possible de corriger ce comportement?
J’ai essayé les documents et Google sans succès.
Merci.
METTRE À JOUR
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_ssortingng; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; } } }
Essayez d’échapper à “%” en tant que “% 25”
http://example.com/articles/foo%252fbar/view/
Vous n’aurez aucun problème si vous utilisez les parameters de requête URL. Lorsque vous pouvez contrôler les routes de vos serveurs, vous pouvez opter pour:
http://example.com/articles/view/?path=foo%2fbar
et nginx ne touchera pas% 2f