首页 > 解决方案 > 将url获取参数转换为nginx中的url段

问题描述

我有这个网址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+)&param3=(\d+)&param3=(\d+)") {
    set $param1 $1;
    set $param2 $1;
    set $param3 $1;
    set $args '';
    rewrite ^.*$ /user/$param1/$param2/$param3 permanent;
    }
}

标签: nginxserverurl-rewriting

解决方案


您的解决方案有两个错误,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; }
    ...
}

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


推荐阅读