阿帕奇严格处理字符


Apache Handling Characters Strangly

>好的,我刚刚将服务器从共享主机切换到专用服务器,除了一个问题外,一切似乎都运行相同。 在我进入这个之前,我应该提到两个服务器在 LAMP 堆栈上运行完全相同的代码点火器配置

我认为仅通过示例来显示是最容易的,因此它们是:

URI:/search/term/%
新服务器结果:错误请求 - 服务器错误
旧服务器结果:执行搜索并返回 % 的结果

URI:/search/term/%20
新服务器结果:搜索并返回空格的结果(%20 的转换)
旧服务器结果:搜索并返回空格的结果(%20 的转换)

URI:/search/term/%2F
新服务器结果:未找到 - 服务器错误
旧服务器结果:搜索并返回/(%2F 的转换)
的结果

我希望服务器在这些实例中产生结果,就像以前的服务器一样。


更新<</strong>BR/>Senario #3 已解决,但第一个问题仍然存在,我无法弄清楚。 我想添加有关它的更多详细信息,以便深入了解它。

确切的错误消息是:
400 错误请求错误;您的浏览器发送了此服务器无法理解的请求。

  1. 当我检查 apache 错误日志时,那里没有关于此错误的任何内容。
  2. 在所有浏览器中和清除缓存后,结果都是相同的。
  3. 最后,我很确定我设置了正确的AcceptPathInfo,因为当我转到url:/robots.txt/klsdfj(不是真实位置)时,它会生成robots.txt文件的内容。 据我所知,这是该指令的正确功能。

如果需要任何进一步的信息,请告诉我,我很乐意提供。谢谢!!

我认为

你应该看看apache指令AllowEncodedslashes或这个:AcceptPathInfo

问候

米米兹

如果要从表单传递该文本,则可能需要使用 Javascript encodeURI()文本并将其传递给服务器。 然后服务器(PHP)可以使用rawurldecode()对其进行解码。 使用您的示例,%20将在 URL 中变得%2520,然后服务器将解码它被%20

http://www.php.net/manual/en/function.rawurldecode.php