我刚刚更改了两个参数名称,并希望将旧名称重定向到更改名称,并在URL中的任何位置使用任何值。 e.g:
product.php?colornew=anyvalue&productname=anyvalue
301重定向到:
product.php?color=anyvalue&product=anyvalue
请注意,这只是一个示例,正如我所说,这两个参数可以在任何值的URL中的任何位置。
答案 0 :(得分:1)
您可以使用此代码在任何网址中重命名查询参数:
RewriteEngine On
# rename query parameter colornew=>color
RewriteCond %{QUERY_STRING} ^(.*&)?colornew=([^&]*)(&.*)?$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1color=%2%3 [NC]
# rename query parameter productname=>product
RewriteCond %{QUERY_STRING} ^(.*&)?productname=([^&]*)(&.*)?$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1product=%2%3 [NC,NE,L,R=302]
答案 1 :(得分:0)
尝试:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?colornew=([^&]+)&productname=([^&\s]+)
RewriteRule ^ %{REQUEST_URI}?color=%1&product=%2 [QSA,NC,NE,L,R=301]
答案 2 :(得分:0)
anubhava 的其他优秀答案的简单修复:
RewriteEngine On
# rename query parameter colornew=>color
RewriteCond %{QUERY_STRING} ^(.*&)?colornew=([^&]*)(&.*|)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1color=%2%3 [NC]
# rename query parameter productname=>product
RewriteCond %{QUERY_STRING} ^(.*&)?productname=([^&]*)(&.*|)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1product=%2%3 [NC,NE,L,R=302]
不同的是,在重写条件的末尾,去掉了问号,并添加了一个“或”运算符:|。
原因是,如果没有这个变化,当最终匹配没有填充任何东西时,URL 变为 product.php?color=anyvalue&product=anyvalue%3 - (&.*)? - 因为该匹配部分中的问号表示它存在或不存在;如果不存在,则 %3 不存在,因此它只是作为字符串附加。相反, (&.*|) 表示匹配可以由与号加上任何内容填充,也可以由任何内容填充。这样,当没有任何内容并且 %3 不会附加到字符串时,%3 会变成 ""。