如何防止 .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)= 将跳过规则