Удалить параметры в nginx rewrite - PullRequest
19 голосов
/ 10 марта 2012

Я переписываю URL в nginx после повторного запуска. На старом сайте у меня были параметры запроса в URL для фильтрации, например,

http://www.example.com/mypage.php?type=4

Новая страница не имеет таких параметров. Я хочу удалить их и переписать URL-адреса главной страницы, чтобы я получил:

http://www.example.com/mypage/

Мое правило перезаписи в nginx:

location ^~ /mypage.php {
    rewrite ^/mypage.php$ http://www.example.com/mypage permanent;
}

Но с этим правилом параметр все еще добавляется. Я думал, что $ остановит nginx от дальнейшей обработки значений ... есть идеи? Все остальные вопросы касаются того, как добавить параметры - я просто хочу удалить мои:)

Ответы [ 4 ]

39 голосов
/ 16 марта 2012

Была похожая проблема, после долгих поисков ответ был представлен в переписать документы .

Если вы укажете?в конце перезаписи Nginx удалит исходные $ args (аргументы)

Так что для вашего примера это подойдет:

location ^~ /mypage.php {
    rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
}
7 голосов
/ 14 января 2015

Чтобы удалить параметр из URL, в этом случае coupon=xxx:

if ($query_string ~ "^(.*)coupon=(.*)$") {
    rewrite ^(.*)$ $uri? permanent;
}

Обратите внимание, что при этом все параметры будут отброшены, если оператор соответствует.$uri - исходный запрос без параметров.

4 голосов
/ 27 февраля 2015

Попробуйте установить переменную $args в пустом месте.

set $args '';
1 голос
/ 22 апреля 2019

Если вы хотите удалить указанный параметр из URL,

#  in location directive: 
if ($request_uri ~ "([^\?]*)\?(.*)unwanted=([^&]*)&?(.*)") {
    set $original_path $1; 
    set $args1 $2; 
    set $unwanted $3; 
    set $args2 $4; 
    set $args ""; 

    rewrite ^ "${original_path}?${args1}${args2}" permanent;
}

, затем посетите your_site.com/a=1&unwanted=2&c=3

step1.Сервер выдает 302 ответ, указывающий, что URL совпадает.

step2.клиент повторно отправляет запрос с новым URL (с удаленным параметром)

...