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