不需要的Apache从目录重定向到同名文件

时间:2011-10-31 18:49:45

标签: php apache redirect

我相信我正在寻找完成此行为的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。

我搜索了各种关键字组合,我无法在任何地方找到答案。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

经过大量搜索后,在其他地方找到了答案。

问题是选项MultiView 已开启。

对我来说,我使用的是虚拟主机,但我在mac OSX Lion上的apache的user.conf文件中配置了我的大部分设置。我不确定我是否添加了这个,或者它是否已经存在...

这就是我做的

  1. 打开终端应用
  2. 类型:cd / etc / apache2 / users
  3. 类型:ls
  4. 从打印出的列表中,您应该看到一个与您的用户名匹配的文件:USERNAME.conf,其中USERNAME是您的实际用户名
  5. 类型:sudo nano USERNAME.conf
  6. 您可能需要输入密码
  7. 找到这一行:选项索引MultiViews
  8. 将其更改为:选项索引
  9. ctrl + x退出,在提示保存文件时点击“y”,并在询问文件名时输入
  10. <强>替代

    如果您没有看到任何内容,可以添加选项-MultiViews。

    如果上述内容不适用,您也可以编辑httpd.conf文件。

    如果使用虚拟主机,则可以编辑httpd-vhosts.conf文件。对于每个站点,编辑标签内的MultiViews选项。通过添加“Options -MultiViews”或删除“Options MultiViews”(如果存在)。

    希望这有助于其他人...