2011-11-25 9 views
16

Giả sử tôi muốn mã hóa tiêu đề bài viết trong URL và có chứa dấu gạch chéo. Nếu tôi URL mã hóa tiêu đề bài viết tôi nhận được:NGINX unescapes% 2f thành dấu gạch chéo. Làm thế nào tôi có thể ngăn chặn nó?

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

nginx đi này để ứng dụng FastCGI của tôi như:

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

nào chứ không phải di tích các ý tưởng.

Tôi nhận thấy rằng nếu Nginx được phục vụ một tập tin, nói /path/to/page.html, sau đó nó có thể đạt được bởi một trong hai URL sau:

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

Tuy nhiên đây không phải là trường hợp cho (ví dụ) Apache.

Có cách nào để khắc phục hành vi này không?

Tôi đã thử các tài liệu và Google không có may mắn.

Cảm ơn.

CẬP NHẬT

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

không cấu hình nginx của bạn trông như thế nào? – Amber

+0

Xem thêm https://stackoverflow.com/a/37584637/873282 – koppor

Trả lời

2

Cố gắng thoát "%" là "% 25"

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

Không phải là ý tưởng tồi (+1), mặc dù có vẻ như bạn đang cố sửa sai bit. (Thay đổi thoát/không thoát của tôi thay vì thay đổi hành vi của nginx) – DaedalusFall

+1

Vâng, bạn có thể thực hiện thay đổi khá đơn giản này hoặc thiết lập về việc cố gắng thay đổi mã lõi. Nhìn vào cách thủy triều chảy và làm việc với nó hoặc cố gắng thay đổi thủy triều. Đó là tất cả về sự lựa chọn. – Dayo

+0

:-) Tôi đã hy vọng rằng nó sẽ là một thay đổi tập tin cấu hình đơn giản. Khi nó quay ra tôi thấy rằng đi qua $ uri cho các công trình PATH_INFO, nhưng bạn phải loại bỏ những thứ cuối cùng trong mã, do đó, điều này cũng có vẻ như điều sai trái để sửa chữa. Nhưng như bạn nói, thủy triều ... tôi đã không tìm thấy $ uri tôi có thể thực hiện ý tưởng% 252f của bạn. – DaedalusFall

0

Bạn sẽ không có bất kỳ rắc rối, nếu bạn sử dụng URL tham số truy vấn. Khi bạn có thể kiểm soát máy chủ của bạn tuyến đường mà bạn có thể đi cho:

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

và nginx sẽ không chạm% 2f