我们以前在apache上运行,并使用下面的代码重定向/替换我们的一个查询参数。
RewriteCond %{QUERY_STRING} ^limit=(.*)$ [NC]
RewriteRule ^ %{REQUEST_URI}?product_list_limit=%1 [L,R=301]
这将成功重定向以下URL
www.example.com/clothing.html?limit=all
至
www.example.com/clothing.html?product_list_limit=all
我使用了一个htaccess重定向转换器,它产生了以下内容。不起作用
location ~ / {
if ($query_string ~* "^limit=(.*)$"){
rewrite ^(.*)$ /$request_uri?product_list_limit=%1 redirect;
}
}
感谢的任何帮助
感谢
您不应该使用$request_uri
来构造重写的URI,因为它还包含?limit=all
,所以您重写的URI看起来像:/clothing.html?limit=all?product_list_limit=all
rewrite
语句重置数字捕获,因此需要在if
语句中使用命名捕获。
没有查询字符串的URI可用作$uri
或rewrite
语句的正则表达式中的捕获。
这两种表格中的任何一种都适用于您:
if ($query_string ~* "^limit=(?<limit>.*)$") {
rewrite ^(.*)$ $1?product_list_limit=$limit? redirect;
}
注意后面的?
,以防止附加原始查询字符串。有关详细信息,请参阅此文档
或者:
if ($query_string ~* "^limit=(.*)$") {
return 302 $uri?product_list_limit=$1;
}
limit
参数的值也可用作$arg_limit
,因此您也可以使用以下内容:
if ($arg_limit) {
return 302 $uri?product_list_limit=$arg_limit;
}
有关详细信息,请参阅本文档。