当 URL 包含百分比符号时如何停止错误 400? (阿帕奇)
Posted
技术标签:
【中文标题】当 URL 包含百分比符号时如何停止错误 400? (阿帕奇)【英文标题】:How to stop error 400 when URL contains a percent % symbol? (Apache) 【发布时间】:2011-10-27 22:47:04 【问题描述】:当请求包含百分比符号的 URL 时,是否有一种简单的方法可以防止服务器返回错误 400(错误请求)?
许多主要网站都有同样的问题,例如:http://twitter.com/% 或http://bing.com/%
但其他网站已修复此问题并改为返回自定义错误页面,而不是标准服务器响应,例如:http://facebook.com/% 或 http://google.com/%
是否有一种简单、单一的方法可以将单个字符 % 符号从返回 400 错误中转义,而是使用自定义错误文档在 Apache 中使用 mod_rewrite 或类似方法返回 404 错误?
【问题讨论】:
你有没有找到一个解决方案来允许 % 在 url 中? 并非如此。处理 URL 中 % 的最佳方法是按照@arnaud576875 的建议进行操作。让“错误 400”页面检查服务器上 URL 中的 %,然后根据需要重定向到另一个页面(或 404 页面)。 【参考方案1】:是否有一种简单、单一的方法可以避免单个字符 % 符号返回 400 错误
是的,您必须对您在 url 中输入的任何字符进行 urlencode,如果它们不具有特殊含义的话。
以 php 为例:
$string = urlencode('%');
仅供参考 %
被编码为 %25
: https://twitter.com/%25
【讨论】:
这不是我想要的。我知道可以使用 PHP 或其他方式转义字符,但是当用户错误地将 % 直接键入 URL 时,我需要一种方法来防止 400 错误,例如:twitter.com/somepage% 单个%
在 URL 中无效,这是一个错误的请求。除了返回错误 400 - 错误请求之外,服务器别无选择。您无法避免有人在他的 URL 栏中输入任何内容。最好的办法是更改错误 400 页面(可以是 php 脚本)。
我也遇到了这个问题,第 3 方客户端发送的 URL 中包含 %'s。是的,我知道它们没有正确转义,不应该以这种方式将它们发送给我们,但是无论如何我们如何处理 URL(本质上我希望 Apache 在 URL 到达我的服务器代码之前用适当的转义重写 URL)
【参考方案2】:
我通过做两件事解决了这个问题。使用 apache 配置,我将此错误定向到我的 400.shtml 文档。第二件事是在我的 .htaccess 文件中:
RewriteEngine On
RewriteRule 400.shtml 404.shtml [L]
您可以使用这两个并使用您的服务器端脚本来处理此错误,而不是仅处理 404.shtml。
干杯。
【讨论】:
以上是关于当 URL 包含百分比符号时如何停止错误 400? (阿帕奇)的主要内容,如果未能解决你的问题,请参考以下文章
当 URL 包含空格时,为啥 urlfetch 会得到 status:400?
springboot中URL带有斜杠的转义字符百分之2F导致的400错误