在nginx中将url获取参数转换为url段

时间:2019-10-03 11:30:20

标签: nginx server url-rewriting

我有这个网址https://example.com/user?param1=value1&param2=value2&param3=value3

并将其转到Nginx服务器上的https://example.com/user/value1/value2/value3

仅供参考,这是WordPress网站,我在Nginx配置文件中添加了以下规则。

location ~ /user/ {
    if ($args ~* "^param1=(\d+)&param3=(\d+)&param3=(\d+)") {
    set $param1 $1;
    set $param2 $1;
    set $param3 $1;
    set $args '';
    rewrite ^.*$ /user/$param1/$param2/$param3 permanent;
    }
}

1 个答案:

答案 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+)&param2=(?<p2>\d+)&param3=(?<p3>\d+)$  /user/$p1/$p2/$p3;
}

server {
    ...
    if ($redirect) { return 301 $redirect; }
    ...
}

有关详细信息,请参见this document