如何防止 .htaccess 规则在 URL 末尾添加无限重复的参数
How to prevent .htaccess rule adding endlessly repeated parameter at the end of the URL
我正在建立一个网站(在 Joomla 4 中,如果相关的话),我正在尝试使用 .htaccess 来重定向 URL,如下所示:
index.php/characters
... 到这样的 URL:
index.php/characters?reset=true
...但单独保留这样的 URL:
index.php/characters?search=fred
我使用 https://htaccess.madewithlove.com/ 测试了以下规则,模拟看起来完全符合我的要求:
RewriteCond %{QUERY_STRING} ^(?!search)
RewriteRule index.php/characters /index.php/characters?reset=true [L,R,QSA]
但这给了我无尽的重定向,看起来像这样:
index.php/characters?reset=true&reset=true&reset=true&reset=true&reset=true&reset=true&reset=true&reset=true (etc)
我做错了什么?
您可以使用这样的重定向规则:
RewriteCond %{QUERY_STRING} !(^|&)(search|reset)= [NC]
RewriteRule ^index\.php/characters/?$ /[=10=]?reset=true [L,R,QSA]
如果查询字符串具有以 search=
或 reset=
.
开头的参数,则否定条件 RewriteCond %{QUERY_STRING} !(^|&)(search|reset)=
将跳过规则
我正在建立一个网站(在 Joomla 4 中,如果相关的话),我正在尝试使用 .htaccess 来重定向 URL,如下所示:
index.php/characters
... 到这样的 URL:
index.php/characters?reset=true
...但单独保留这样的 URL:
index.php/characters?search=fred
我使用 https://htaccess.madewithlove.com/ 测试了以下规则,模拟看起来完全符合我的要求:
RewriteCond %{QUERY_STRING} ^(?!search)
RewriteRule index.php/characters /index.php/characters?reset=true [L,R,QSA]
但这给了我无尽的重定向,看起来像这样:
index.php/characters?reset=true&reset=true&reset=true&reset=true&reset=true&reset=true&reset=true&reset=true (etc)
我做错了什么?
您可以使用这样的重定向规则:
RewriteCond %{QUERY_STRING} !(^|&)(search|reset)= [NC]
RewriteRule ^index\.php/characters/?$ /[=10=]?reset=true [L,R,QSA]
如果查询字符串具有以 search=
或 reset=
.
RewriteCond %{QUERY_STRING} !(^|&)(search|reset)=
将跳过规则