location + rewrite и (де)кодирование URI
Gena Makhomed
gmm на csdoc.com
Вт Июн 18 03:31:24 UTC 2019
Здравствуйте, All!
Есть такой фрагмент документации на директиву location:
Синтаксис: location [ = | ~ | ~* | ^~ ] uri { ... }
Для сопоставления используется URI запроса в нормализованном виде,
после декодирования текста, заданного в виде “%XX”, преобразования
относительных элементов пути “.” и “..” в реальные и возможной
замены двух и более подряд идущих слэшей на один.
Есть такой фрагмент конфига:
location ~ ^/wiki/(?<title>.*) {
return 301 https://$host/$title$is_args$args;
}
Судя по документации, этот фрагмент конфига не должен работать, потому
что в $title ведь попадает уже декодированный русский текст из location?
Но почему-то эксперимент с помощью curl показывает, что в редиректе
возвращается текст закодированный в виде “%XX”, а не обычный Unicode.
Почему все работает именно так и как тогда надо понимать документацию?
В каких случаях в nginx необходимо вручную кодировать/декодировать
фрагменты uri и/или переменные $arg_имя а когда этого делать не надо?
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru