polyanin
@polyanin
Golang, PHP & Symfony developer

Чем отличается rewrite ... permanent от return 301 ... ?

только что начал переходить с apache на nginx
if ($request_uri ~ "\.") {
    rewrite ^/(.*)/$ /$1 permanent;
}

if ($request_uri ~ "\.") {
    rewrite ^/(.*)/$ /$1;
    return 301;
}
  • Вопрос задан
  • 6006 просмотров
Пригласить эксперта
Ответы на вопрос 3
benbor
@benbor
Помог ответ - не забудь лайкнуть
nginx.org/ru/docs/http/ngx_http_rewrite_module.html
permanent
возвращает постоянное перенаправление с кодом 301.

Ответ, ничем
Ответ написан
Lynn
@Lynn
nginx, js, css
В первом случае у вас редирект будет только если URI заканчивается на слеш.

Во втором всегда и на пустой Location который браузер проинтерпретирует как текущий и вы получите бесконечный цикл редиректов.

У return 301 обязательно должен быть второй параметр — адрес. В данном случае можно было бы написать:

if ($request_uri ~ "\.") {
    rewrite ^/(.*)/$ /$1;
    return 301 $uri;
}
Ответ написан
Комментировать
@KPEBETKA
Лучше юзайте rewrite, ибо с return можно поймать CRLF
Если будет в конфиге присутствовать конструкция вида
location / {
return 302 https://$host$uri;
}
То при переходе по ссылке вида https://example.com/CRLF%0d%0aSet-Cookie:%20BUG%3dHi, юзеру злоумышленник внедрит произвольный header
Это довольно часто встречающийся баг
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы