【问题标题】:Which takes precedence: reading the .htaccess or a 301 redirect?哪个优先:读取 .htaccess 或 301 重定向?
【发布时间】:2012-09-01 06:25:00
【问题描述】:

我的 .htaccess 文件中有以下几行:

    #redirect A
    RewriteCond %{DOCUMENT_ROOT}/partners/$1/index.shtml -f
    RewriteRule ^(.*) /partners/$1/ [R=301,L]

这些行检查目录是否存在,如果存在则重定向用户。

    #redirect B
    RewriteCond %{DOCUMENT_ROOT}/partners/$1/index.shtml !-f
    RewriteRule ^(.*) /partners/default.php?code=$1 [R=301,L]

同样,这些行检查目录是否不存在,如果找不到目录,则将用户重定向到其他地方。

这是发生了什么:假设我访问 www.example.com/andyf 并且 andyf 文件夹在 partners 目录中不存在,然后我被带到 www.example.com/partners/default.php?code=andyf

到目前为止,一切都很好。

但是,如果稍后创建 andyf 目录,我仍然会转到 default.php 页面,即使现在存在正确的目录。这取决于已实施的 301 重定向。

让我困惑的是,如果.htaccess 文件是read on every request,那么为什么不重定向A 覆盖重定向B?还是像我怀疑的那样,在读取 .htaccess 文件之前发生了 301 重定向?

【问题讨论】:

  • 顺便说一句,我不认为重定向 B 应该是 301 重定向(很可能应该是 307),但这是我自己遇到的情况,现在我很感兴趣在结果中。
  • 清除浏览器缓存后,还是一样的结果吗?
  • 如果我从浏览器中清除缓存,那么它似乎不会忘记 301。但是,如果我在 Fiddler 中点击 Clear Cache 按钮,它似乎成功地忘记了它们 - 我不确定这是为什么。
  • 那么这只是缓存的问题,而不是htaccess。
  • 好的,谢谢。那么这就是答案吗?在 .htaccess 文件之前检查并执行缓存?如果您写下您的评论作为答案,我将很乐意接受。

标签: .htaccess redirect


【解决方案1】:

似乎只是缓存的问题,如果你清除缓存,它会按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2011-05-01
    • 2011-01-03
    • 2012-03-10
    • 2021-07-22
    相关资源
    最近更新 更多