【问题标题】:Apache - Rewrite Rule confusionApache - 重写规则混淆
【发布时间】:2010-11-24 17:32:16
【问题描述】:
Redirect 301 /resort.php/FOO/BAR http://www.sitename.com.com/index.php
RewriteRule ^/direct/(.*) /direct/$1 [QSA,L] # access non i18n files directly
RewriteRule ^/([a-z]{2}\/.*)        /$1 [QSA,L] #any language subdirectory should be left alone
RewriteRule ^/(.*\/$)               /en/$1index.php [QSA,L] #fix for links ending in /
RewriteRule ^/(.*\.php)             /en/$1 [QSA,L]  #any php file with no language subdirectory redirects to the default language

为什么第一个重定向 301 没有进入主页的解释是什么?当我用..替换它时。

RewriteRule ^/resort.php(.*) http://www.sitename.com/index.php [R=301,L]

它开始工作。我确定这是因为我有一堆规则,它会转到一个并跳到另一个,但我有点迷茫,也许大师可以更清楚地解释这一点。

我的目录结构是这样的:

/en/index.php
/direct/

根目录下没有/index.php,我一开始是重定向到en的。

【问题讨论】:

    标签: apache mod-rewrite http-status-code-301


    【解决方案1】:

    Redirect 指令正在与 mod_rewrite 发生冲突。后者非常激进,可能会覆盖Redirect 指令在响应中设置的重定向HTTP 标头。

    您已经找到了解决方案 - 使用 RewriteRule 执行重定向。 [L] 标志表示“最后一条规则 - 不再处理”,这是您防止规则相互干扰的方式。简单的Redirect 指令只是实现RewriteRule 的更简单功能的一种简单方法。

    【讨论】:

    • 啊,我知道这是某种冲突。
    【解决方案2】:
    RewriteRule /resort.php/FOO/BAR http://www.sitename.com.com/index.php [R=P, L]
    

    你的规则不是跳来跳去的,事实上,L 标志意味着 LAST 规则,所以当一个被触发时,文件停止被读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2022-01-01
      • 2017-12-13
      • 2011-09-02
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多