преобразовать URL получить параметры в URL-сегмент в Nginx - PullRequest
2 голосов
/ 03 октября 2019

У меня есть этот URL https://example.com/user?param1=value1&param2=value2&param3=value3

и он должен перейти на https://example.com/user/value1/value2/value3 на сервере Nginx.

Просто к вашему сведению это сайт 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 Ответ

1 голос
/ 03 октября 2019

В вашем решении есть две ошибки: 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; }
    ...
}

См. этот документ для деталей.

...