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