【问题标题】:convert url get parameters to url segment in nginx将url获取参数转换为nginx中的url段
【发布时间】:2020-02-01 17:17:42
【问题描述】:

我有这个网址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;
    }
}

【问题讨论】:

    标签: nginx server url-rewriting


    【解决方案1】:

    您的解决方案有两个错误,1) location/user 不匹配,2) rewrite 也附加了原始参数。

    这可以通过在rewrite 上使用精确匹配location 和尾随? 来解决。例如:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2021-05-08
      相关资源
      最近更新 更多