【问题标题】:mod_rewrite not working in top directory but OK in subdirectoriesmod_rewrite 在顶级目录中不起作用,但在子目录中正常
【发布时间】:2010-10-13 13:58:43
【问题描述】:

我之前在几个目录中使用过 mod_rewrite(很少),通过为该目录放入一个 .htaccess 文件没有问题,现在它可以在那里工作。但是当我尝试在我的顶级目录中使用它时,什么也没有发生!?!?!但是那个 .htaccess 文件(第一级)在其他方面工作正常。我有 Redirect 301 和其他各种东西,但没有打开 mod_rewrite。我正在运行加载了 mod_rewrite 和 mod_proxy 的 Apache 2.0.63。

作为一个测试用例,我设置了以下 4 个文件(fileA、html、fileB.html、fileC.html、fileD.html)并将它们放在 /test 目录中。每个文件都包含相应的字母(例如 AAAA、BBBB),因此我可以肯定地识别它们。在 /test 目录中,我用

创建了一个 .htaccess 文件
Redirect 301 /test/fileA.html http://www.xyz.com/test/fileB.html
RewriteEngine on
RewriteRule ^fileC\.html$ fileD.html

一切都按预期工作:即使在请求 A 或 C 时,您也只能看到 fileB.html 和 fileD.html。

然后我将这些文件复制到根 html 目录并添加到那里的 .htaccess 中:

Options +FollowSymLinks (this was already there)
Redirect 301 /fileA.html http://www.xyz.com/fileB.html
RewriteEngine on
RewriteRule ^fileC\.html$ fileD.html

.htaccess 中没有关于这些文件的其他命令。现在您可以看到 fileB.html 和 fileD.html,但也可以看到 fileC.html 而不是 fileA.html!!!所以 mod_rewrite 规则在这里不工作,重定向工作。

我在网上搜索了关于这个的想法,但徒劳无功。有人知道我做错了什么吗?

【问题讨论】:

  • 您确定这不是缓存问题,因为您的浏览器只是向您显示它已缓存的 fileC.html 版本并且根本没有探测服务器吗?
  • 是的,我清除了缓存并重新获取以确保。
  • 您说“.htaccess 中没有关于这些文件的其他命令”,但这是否意味着那里实际上还有其他指令?还是真的只是你展示的那样?
  • 原来我仍然在其他似乎导致问题的 URL(实际上是我想要的 URL)上激活了一些 mod_rewrite。请看下面我的回答。感谢您将我推向正确的方向。

标签: mod-rewrite apache2


【解决方案1】:

看起来问题,至少在我的测试用例中,在我确实拥有的 .htaccess 文件中以某种方式更进一步 重写引擎开启 RewriteCond %{HTTP_USER_AGENT} !FeedBurner 接下来是一些我真正想要的 RewriteRules 和一个 RewriteEngine 关闭 - 最后一个是我误导(?)努力清除 RewriteCond 以免影响未来可能的 RewriteRules。另外我发现我最初对其中一些有问题,因为我在模式匹配中包含了初始的“/”,这显然是不正确的。

我评论了所有这些,我的测试用例和我真正想要的东西开始按预期工作。从那以后到处玩让我相信关闭 RewriteEngine 是真正的罪魁祸首。无论如何,现在一切都按预期工作。感谢您将我推向正确的方向,希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2013-05-31
    • 2011-10-13
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多