2016-03-24 3 views
3

Я пытаюсь перенаправить весь трафик с URL-адресов, содержащих «www.». к аналогичному URL-адресу, который не содержит его, но когда я это делаю, Nginx добавляет повторяющуюся строку запроса в конце URL-адреса.Nginx дублирующая строка запроса при перенаправлении

Например, пользователь вводит:

www.website.com/test/?_id=12345 

И они получают перенаправлены:

website.com/test/?_id=12345?_id=12345 

Вот мой конфиг:

server { 
    server_name www.website.com; 
    return 301 $scheme://website$request_uri permanent; 
} 

server { 
    server_name website.com 
    # actual server stuff 
} 

Я попытался присоединяя «? ' до конца перенаправления после части «request_uri», потому что форма, которую я прочитал, должна работать, но это не так.

ответ

2

Ваша конфигурация неверна. Кажется, вы перепутали синтаксис return и rewrite. См. this document.

Переменная $request_uri уже включает в себя строку запроса, так что это должно работать с return:

return 301 $scheme://example.com$request_uri; 

директива rewrite добавит строку запроса, если только ? не добавляется. Для выполнения той же функции можно использовать директиву rewrite, но в этом случае это будет излишним.

Как ваш конфиг является недействительным, nginx все еще работают с более ранней конфигурацией, возможно, более ранним экспериментом, который помещен $request_uri в rewrite директиве, следовательно, строкой двойного запроса.

+0

Спасибо, я думаю, это было странное сочетание моего браузера, кэширующего неправильные переадресации и то, что вы сказали. Я ценю это. – loganhuskins

Смежные вопросы