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

Maxim Dounin mdounin на mdounin.ru
Вт Июн 18 08:27:41 UTC 2019


Hello!

On Tue, Jun 18, 2019 at 06:31:24AM +0300, Gena Makhomed wrote:

> Здравствуйте, All!
> 
> Есть такой фрагмент документации на директиву location:
> 
>      Синтаксис: location [ = | ~ | ~* | ^~ ] uri { ... }
> 
>      Для сопоставления используется URI запроса в нормализованном виде,
>      после декодирования текста, заданного в виде “%XX”, преобразования
>      относительных элементов пути “.” и “..” в реальные и возможной
>      замены двух и более подряд идущих слэшей на один.
> 
> Есть такой фрагмент конфига:
> 
>      location ~ ^/wiki/(?<title>.*) {
>          return 301 https://$host/$title$is_args$args;
>      }
> 
> Судя по документации, этот фрагмент конфига не должен работать, потому
> что в $title ведь попадает уже декодированный русский текст из location?
> 
> Но почему-то эксперимент с помощью curl показывает, что в редиректе 
> возвращается текст закодированный в виде “%XX”, а не обычный Unicode.

Эксперимент, видимо, плохой, негодный.

$ curl -vvv http://127.0.0.1:8080/wiki/%d1%82%d0%b5%d1%81%d1%82
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /wiki/%d1%82%d0%b5%d1%81%d1%82 HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.62.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.17.1
< Date: Tue, 18 Jun 2019 08:25:18 GMT
< Content-Type: text/html
< Content-Length: 169
< Connection: keep-alive
< Location: https://127.0.0.1/тест
< 
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.17.1</center>
</body>
</html>
* Connection #0 to host 127.0.0.1 left intact

-- 
Maxim Dounin
http://mdounin.ru/


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