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

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


On 18.06.2019 14:09, Maxim Dounin wrote:

> Проще всего сделать так:
> 
>      rewrite ^/wiki/(.*) https://$host/$1;

в таком случае в редиректе возвращается раскодированный урл:

$ curl -I https://example.com/wiki/%D1%82%D0%B5%D1%81%D1%82
HTTP/1.1 301 Moved Permanently
Location: https://example.com/тест

Более многословный вариант редиректа работает корректно,
так как и ожидается от него в соответствии с RFC 3986:

# curl -I https://example.com/wiki/%D1%82%D0%B5%D1%81%D1%82
HTTP/1.1 301 Moved Permanently
Location: https://example.com/%D1%82%D0%B5%D1%81%D1%82

Конфиг, который работает корректно:

Файл 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;
      }
}

-- 
Best regards,
  Gena



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