Удаление только определенного параметра URL в Nginx с перезаписью - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь заставить Nginx удалить только определенный параметр из запрошенного URL. Допустим, имя параметра par2. Вот примеры запрошенных URL:

www.example.com/page?par1=a&par2=b
www.example.com/page?par2=b

Эти страницы должны перенаправляться на:

www.example.com/page?par1=a
www.example.com/page

Вот что у меня есть в файле conf на данный момент:

location / {
    ...
    if ($args ~* "par2") {
        rewrite ^(.*)$ $request_uri permanent;
    }
}

Это частично работает - он удаляет параметр par2, но он также удаляет все остальные параметры и перенаправляет на:

www.example.com/page
www.example.com/page

Как заставить его удалить только определенный параметр (в данном случае par2)?

EDIT: Насколько я знаю, рекомендуется использовать if только если за ним следует rewrite, поэтому я бы предпочел такое решение.

1 Ответ

0 голосов
/ 03 ноября 2018

Это должно работать для вашего случая использования, когда параметр может быть где угодно

location /page {
    if ($request_uri ~ ^(/page)(.par2=[0-9a-zA-Z]&?)$){
       return 302 $1;
    }
    if ($request_uri ~ ^(/page\?.+)(.par2=[0-9a-zA-Z])(.*)$){
       return 302 $1$3;
    }
    if ($request_uri ~ ^(/page\?)(par2=[0-9a-zA-Z]&?)(.+)$){
       return 302 $1$3;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...