【问题标题】:400 code error when URL contains % symbol? (NGINX)URL 包含 % 符号时出现 400 代码错误? (NGINX)
【发布时间】:2016-08-03 17:12:59
【问题描述】:

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

我的网站的 Nginx 配置:

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

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

400 Bad Request

使用此网址: http://mywebsite.net/download/some-string-%25-for-example 没问题!

【问题讨论】:

  • 可以显示原始链接吗?我想在自己的浏览器中测试链接
  • 对不起,这不是因为它是我计算机上托管的应用程序,而是我的 url 中的字符串 '100%' 出现 400 错误,但使用 %20 字符串可以正常工作

标签: url redirect nginx symbols bad-request


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

【讨论】:

  • 尝试将 URL 中的 100% 更改为 100%25。如果它有效,那么我是对的
  • headteacherofgreenfield.wordpress.com/2016/03/23/… 在该 URL 中,标题为 100% Celebrations!,但永久链接自动生成为 100-celebrations。这是因为他们知道输入100% 会导致问题。
  • 但是你的“答案还不清楚”,我需要做些什么改变?
  • 您必须使用 URL 编码功能将您的 URL 转换为 URL 友好格式。该功能取决于您使用的语言。这适用于 python:stackoverflow.com/questions/5607551/python-urlencode-string
  • 问题是在执行php代码之前发生400错误所以我不能做字符串编码,所以我应该在nginx文件配置中做一些事情,例如检查$request_uri并将%替换为空字符,真的不知道!!
猜你喜欢
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2013-07-16
  • 1970-01-01
  • 2020-10-05
  • 2020-06-05
  • 1970-01-01
相关资源
最近更新 更多