使用mod_rewrite将一个URL替换为另一个URL

时间:2010-12-14 10:49:07

标签: apache mod-rewrite

现状

RewriteRule ^$ /index.php?page=Portal [R=301,L]

当用户访问网站并转到" root"域名网址(RegExp" ^ $")他被重定向到/index.php?page=Portal

那是在工作。

现在我们有" index.php?page = Portal"在谷歌索引中,我们在互联网上的各个位置都有大量指向该页面的链接。

预期的新情况

我们希望门户网站页面显示在根网址上 - 没有重定向。这没问题......只需删除重定向:

RewriteRule ^$ /index.php?page=Portal [L]

现在我们还希望将旧网址重定向到新位置,这就是我失败的地方,但无法理解原因:

RewriteCond %{QUERY_STRING} ^page=Portal$
RewriteRule ^index.php$ http://www.jacatu.de/? [R=301,L]

一旦我这样做,我就会进入重定向循环:

alt text

(当我在.htaccess中更改为302时,我看到302重定向,所以循环似乎真的是由mod_rewrite引起的)

但为什么呢?所有规则都标记为最后 [L] - 所以我想我可以排除规则2触发规则1.

1 个答案:

答案 0 :(得分:0)

我按照Jacek Prucia的建议启用了日志记录,实际上看起来URL中的[L]不会停止执行。这两条规则都得到了处理。

我现在将第一次重写更改为

RewriteRule ^$ /index.php?page=Portal&int=1 [L]

因此它与内部重写的RewriteCond不匹配所以理论上我的问题就解决了。不过,要知道为什么它做了它所做的事情会很高兴。 :)