URL 包含 % 符号时出现 400 代码错误? (NGINX)

400 code error when URL contains % symbol? (NGINX)

如何使用 NGINX 服务器在 URL 包含 % 符号时防止服务器返回 error 400 代码错误?

我网站的 Nginx 配置:

....
   rewrite ^/download/(.+)$   /download.php?id=  last;
....

当我试图访问此 URL 时: http://mywebsite.net/download/some-string-100%-for-example 我收到此错误:

400 Bad Request

有了这个 url : http://mywebsite.net/download/some-string-%25-for-example 一切正常!

因为需要先URL编码

这将解释: http://www.w3schools.com/tags/ref_urlencode.asp

URLs can only be sent over the Internet using the ASCII character-set.

Since URLs often contain characters outside the ASCII set, the URL has to be converted into a valid ASCII format.

URL encoding replaces unsafe ASCII characters with a "%" followed by two hexadecimal digits. URLs cannot contain spaces. URL encoding normally replaces a space with a plus (+) sign or with %20.

URL 解释器看到后面没有十六进制的 % 感到困惑。

为什么会想到通过更改Nginx配置来解决???

服务器端无法解决。是客户端的问题。

https://headteacherofgreenfield.wordpress.com/2016/03/23/100-celebrations/

在 URL 中,标题是 100% Celebrations!,但永久链接自动生成到 100-celebrations。这是因为他们知道输入 100% 会导致 URL 编码问题。

如果连 Wordpress 都不按照您的方式来做,那您为什么要这样做?