我有这个网址https://example.com/user?param1=value1¶m2=value2¶m3=value3
并将其转到Nginx服务器上的https://example.com/user/value1/value2/value3。
仅供参考,这是WordPress网站,我在Nginx配置文件中添加了以下规则。
location ~ /user/ {
if ($args ~* "^param1=(\d+)¶m3=(\d+)¶m3=(\d+)") {
set $param1 $1;
set $param2 $1;
set $param3 $1;
set $args '';
rewrite ^.*$ /user/$param1/$param2/$param3 permanent;
}
}
答案 0 :(得分:1)
您的解决方案有两个错误,1)location
与/user
不匹配,以及2)rewrite
还在附加原始参数。
可以通过使用完全匹配location
和?
上的结尾rewrite
来解决此问题。例如:
location = /user {
...
rewrite ^ /user/$param1/$param2/$param3? permanent;
}
但是,map
语句是一种更干净,可扩展的解决方案,例如:
map $request_uri $redirect {
default 0;
~*^/user?param1=(?<p1>\d+)¶m2=(?<p2>\d+)¶m3=(?<p3>\d+)$ /user/$p1/$p2/$p3;
}
server {
...
if ($redirect) { return 301 $redirect; }
...
}
有关详细信息,请参见this document。