3

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

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

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

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

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

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


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

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

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

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

4

2 回答 2

3

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

问候

咪咪

于 2012-06-07T21:07:06.013 回答
0

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

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

于 2012-06-07T21:02:47.103 回答