URL перенаправления NGINX со строками запроса - PullRequest
0 голосов
/ 23 января 2019

У меня есть эта конфигурация NGINX:

root    /var/www/web;
index   index.php;

server_name  domain.com;
access_log  off;
error_log on;

location / {
    rewrite ^/(.*)$ /index.php?tag=$1&page=1 last;
}

Теперь я хочу перенаправить URL-адрес типа "domain.com/index.php?tag=1§ion=2&type=3" в "домен.com / tag / section / type "

как я могу это сделать, где я должен поместить код?пожалуйста помогите,

Спасибо

Я уже пробовал:

location / {
   rewrite ^/index\.php?tag=(.*)&section=(.*)&type=(.*)$ /$1/$2/$3 permanent;
   rewrite ^/(.*)$ /index.php?tag=$1&page=1 last;
}

но это не сработало ..

1 Ответ

0 голосов
/ 23 января 2019

Директивы rewrite и location используют нормализованный URI, который не содержит строку запроса.

Чтобы проверить строку запроса, вам необходимо обратиться к переменной $request_uri или $argsиспользование оператора if и / или директивы map.

Преимущество использования $request_uri заключается в том, что он содержит исходный запрос и поможет избежать цикла перенаправления.

Еслиу вас есть только одно перенаправление, решение map возможно переполнено.

Попробуйте:

if ($request_uri ~ ^/index\.php\?tag=(.*)&section=(.*)&type=(.*)$) {
    return 301 /$1/$2/$3;
}
location / {
    ...
}

См. это предупреждение об использовании if.

...