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

时间:2016-04-12 21:22:55

标签: url redirect nginx symbols bad-request

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

我网站的Nginx配置:

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

当我尝试访问此网址时: http://mywebsite.net/download/some-string-100%-for-example 我收到了这个错误:

400 Bad Request

使用此网址: http://mywebsite.net/download/some-string-%25-for-example 它的工作正常!

1 个答案:

答案 0 :(得分:0)

这是因为它需要首先进行URL编码。

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

  

只能使用ASCII字符集通过Internet发送URL。

     

由于URL通常包含ASCII集之外的字符,因此必须将URL转换为有效的ASCII格式。

     

URL编码用“%”后跟两个十六进制数字替换不安全的ASCII字符。   网址不能包含空格。 URL编码通常用加号(+)或%20替换空格。

URL解释器很难看到后面没有十六进制的%

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

从服务器端解决是不可能的。这是客户端的问题。

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

在该网址中,标题为100% Celebrations!,但固定链接会自动生成为100-celebrations。这是因为他们知道放置100%会导致URL编码问题。

如果即使Wordpress没有按照你的方式去做,那你为什么要这样做呢?