【发布时间】:2011-10-31 18:49:44
【问题描述】:
我相信我正在寻找实现此行为的 Apache 设置或 mod,因为我需要将其关闭或以某种方式更改它。这是交易:
我有自己的 CMS,它有自己的路由器来处理重定向、包含、404 错误和漂亮的 URL。 mod_rewrite 规则可以完美地将适当的请求定向到此路由器,但是有一个奇怪的情况导致 Apache 崩溃,甚至从未将请求发送到路由器。
- 文件位于 www.example.com/contact.form.php
- CMS 内容位于 www.example.com/contact/contact-us
CMS 内容的请求应该发送到路由器,因为它与文件系统中存在的文件或目录不匹配。实际发生的是某种奇怪的请求,它找到了 contact.form.php 文件,但不知何故仍然导致 Apache 给出自己的 404 错误。
路由器的设计目的是捕获 404 错误,因此永远不会看到 Apache 的 404 屏幕。在联系人“目录”之外为该域输入的所有 URL(无论多么荒谬)都会进入我的路由器并检索正确的内容或显示我的 404 页面。
到目前为止我想出的解决方法:
- 将文件名更改为 form.contact.php -- 这会禁用任何最终可能存在于 www.example.com/form/... 中的 CMS 内容
- 在 www.example.com/contact/ 创建一个空目录
冲突显然与匹配 PHP 文件名第一部分的“目录”名称有关。只要满足此条件,此行为就存在,不满足则不存在。不幸的是,使用 CMS,我永远无法保证“目录”名称不会与 PHP 文件名冲突。因此,我的重点是调整 Apache。
我搜索了各种关键字组合,但在任何地方都找不到答案。有什么想法吗?
【问题讨论】:
-
备案:我完全不知道为什么在文件系统中创建空目录可以解决这个问题。
-
看起来问题可能出在 Apache 试图猜测我的文件名的“内容协商”上。如果有人可以对我需要做什么提供一个可靠的解释,我会很乐意接受答案。
-
webmasters.stackexchange.com 可能是这个问题的更好的地方。
-
我看了那里,但因为在这里找到了更多类似的问题和答案,所以我在这里问了。
-
我在 mac osx lion 上的本地安装遇到了同样的问题。我以前从来没有这样过......