Nginx替换查询字符串重定向



我们以前在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可用作$urirewrite语句的正则表达式中的捕获。

这两种表格中的任何一种都适用于您:

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;
}

有关详细信息,请参阅本文档。

最新更新