Re: location + rewrite и (де)кодирование URI

Gena Makhomed gmm на csdoc.com
Вт Июн 18 10:27:36 UTC 2019


On 18.06.2019 11:27, Maxim Dounin wrote:

>> Есть такой фрагмент документации на директиву location:
>>
>>       Синтаксис: location [ = | ~ | ~* | ^~ ] uri { ... }
>>
>>       Для сопоставления используется URI запроса в нормализованном виде,
>>       после декодирования текста, заданного в виде “%XX”, преобразования
>>       относительных элементов пути “.” и “..” в реальные и возможной
>>       замены двух и более подряд идущих слэшей на один.

>> Есть такой фрагмент конфига:
>>
>>       location ~ ^/wiki/(?<title>.*) {
>>           return 301 https://$host/$title$is_args$args;
>>       }
>>

Получается, что в документации написано все правильно, приведенный
фрагмент конфига содержит ошибку, и правильно будет переписать его
таким образом:

======================================================================

Файл conf.d/example.com.js:

function title_encodeURIComponent(r) {
     return encodeURIComponent(r.variables.title);
}

Файл conf.d/example.com.conf:

js_include conf.d/example.com.js;
js_set $title_encodeURIComponent title_encodeURIComponent;

server {
     # ...
     location ~ ^/wiki/(?<title>.*) {
         return 301 https://$host/$title_encodeURIComponent$is_args$args;
     }
     # ...
}

======================================================================

?

Только в этом случае поведение nginx будет полностью соответствовать
RFC 3986 и более простого варианта решения этой задачи не существует?

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru