重定向与htaccess中的重写条件相结合

时间:2010-03-12 14:09:33

标签: apache .htaccess mod-rewrite friendly-url

我有一个由cms驱动的网站,没有更改代码的选项。我想要完成的是创建友好的URL,只使用apach mod-rewrite引擎。

问题是我正在创建一个无限循环,因为我首先将原始URL(index.php?id = 21)重定向到友好的(/ friendly /),然后将'/ friendly'部分重写为'ID = 21'

我知道在这种情况下应该有一个额外的条件或参数来避免循环,但是我无法获得一种可行的解决方案。

这是代码:

RewriteCond %{query_string} ^id=21$ [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L]

2 个答案:

答案 0 :(得分:3)

我猜你是在两个方向重写,以确保将旧链接重定向到新的友好网址?

您可以在所有“友好”重写中添加一个虚拟参数,以便它们与其他规则不匹配:

RewriteCond %{query_string} ^id=21$ [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21&dummy=1 [L]

答案 1 :(得分:3)

您需要查看 THE_REQUEST 中的request line以查看最初请求的内容:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?id=21\  [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L]