Nginx 重定向特定参数列表
Nginx redirecting for specific list of arguments
我有一个 URL 中一些过时参数的列表。
arg1
arg2
arg3
...
argn
我需要将 link 的查询部分中具有任何这些参数的任何请求重定向到特定站点。
/page.html?arg1=sxx&arg2=uuu -> http://xxx.x.xxx.x
/page.php?arg3= -> http://xxx.x.xxx.x
/dir/dir/page/?arg2=111&& argn=xyyyy -> http://xxx.x.xxx.x
/page.html (is not redirected but matched to other existing rules in nginx)
知道如何很好地表达它吗?由于某些原因,location 没有要由正则表达式匹配的参数。
假设参数顺序是确定的,您可以针对 $request_uri 变量测试多个正则表达式。
map
指令可用于列出多个规则和目标。
例如:
map $request_uri $redirect {
default 0;
~^/page\.html\?arg1=sxx&arg2=uuu http://xxx.x.xxx.x;
~^/page\.php\?arg3= http://xxx.x.xxx.x;
...
}
server {
...
if ($redirect) {
return 301 $redirect;
}
您当然希望通过插入空格 (.*
) 和单词边界 (\b
) 来改进上面的正则表达式。
参见 this document for the map
directive, and this note 关于 if
的使用。
我有一个 URL 中一些过时参数的列表。
arg1
arg2
arg3
...
argn
我需要将 link 的查询部分中具有任何这些参数的任何请求重定向到特定站点。
/page.html?arg1=sxx&arg2=uuu -> http://xxx.x.xxx.x
/page.php?arg3= -> http://xxx.x.xxx.x
/dir/dir/page/?arg2=111&& argn=xyyyy -> http://xxx.x.xxx.x
/page.html (is not redirected but matched to other existing rules in nginx)
知道如何很好地表达它吗?由于某些原因,location 没有要由正则表达式匹配的参数。
假设参数顺序是确定的,您可以针对 $request_uri 变量测试多个正则表达式。
map
指令可用于列出多个规则和目标。
例如:
map $request_uri $redirect {
default 0;
~^/page\.html\?arg1=sxx&arg2=uuu http://xxx.x.xxx.x;
~^/page\.php\?arg3= http://xxx.x.xxx.x;
...
}
server {
...
if ($redirect) {
return 301 $redirect;
}
您当然希望通过插入空格 (.*
) 和单词边界 (\b
) 来改进上面的正则表达式。
参见 this document for the map
directive, and this note 关于 if
的使用。