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