Apache奇怪地处理字符

时间:2012-06-07 20:58:01

标签: php apache codeigniter mod-rewrite

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

我认为仅通过示例展示是最容易的,所以这里是:

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

的结果

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

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

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


更新
Senario#3已经解决,但第一个问题仍然存在,我无法弄明白。我想添加更多关于它的细节,以便可以深入了解它。

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

  1. 当我检查apache错误日志时,那里没有任何关于此错误的内容。
  2. 所有浏览器和清除缓存后的结果相同。
  3. 最后,我很确定我设置 AcceptPathInfo On 是正确的,因为当我转到url:/robots.txt/klsdfj(不是真实位置)时,它会生成机器人的内容.txt文件。据我所知,这是该指令的正确功能。
  4. 如果需要进一步的信息,请告诉我,我很乐意提供。 谢谢!!

2 个答案:

答案 0 :(得分:3)

我认为你应该看一下apache指令AllowEncodedslashes或者这个:AcceptPathInfo

此致

mimiz

答案 1 :(得分:0)

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

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