我有一个由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]
答案 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]