【问题标题】:Replace one URL with another by using mod_rewrite使用 mod_rewrite 将一个 URL 替换为另一个
【发布时间】:2010-12-14 10:49:06
【问题描述】:

现状

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

当用户访问网站并转到域的“根”URL(正则表达式“^$”)时,他会被重定向到 /index.php?page=Portal

这行得通。

现在我们在 google 索引中有“index.php?page=Portal”,并且我们在互联网的各个位置都有大量指向该页面的链接。

预期的新情况

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

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

现在我们还希望旧 url 重定向到新位置,这就是我失败但看不到原因的地方:

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

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

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

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

【问题讨论】:

  • 在假设任何事情之前,您可能需要启用 mod_rewrite 日志记录(RewriteLogLevel 2 + RewriteLog /path/to/logfile)。我有几个 mod_rewrite 问题,仅通过阅读 mod_rewrite 日志就解决了。

标签: apache mod-rewrite


【解决方案1】:

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

我现在把第一次重写改成

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多