1
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。

4

2 回答 2

3

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

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

于 2009-09-01T18:21:08.647 回答
0
RewriteRule /resort.php/FOO/BAR http://www.sitename.com.com/index.php [R=P, L]

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

于 2009-09-01T18:11:13.160 回答