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