Welcome! Log In Create A New Profile

Advanced

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

Gena Makhomed
June 19, 2019 09:48AM
On 19.06.2019 14:54, Maxim Dounin wrote:

>> location /wiki1/ {
>> rewrite ^/wiki1/(.*) https://$host/$1;
>> }
>>
>> location /wiki2/ {
>> rewrite ^/wiki2/(?<title>.*) https://$host/$title;
>> }
>>
>> Вот запросы к первому и второму location`у:
>>
>> $ curl -I http://127.0.0.1:8080/wiki1/%D1%82%D0%B5%D1%81%D1%82
>> Location: https://127.0.0.1/%D1%82%D0%B5%D1%81%D1%82
>>
>> $ curl -I http://127.0.0.1:8080/wiki2/%D1%82%D0%B5%D1%81%D1%82
>> Location: https://127.0.0.1/тест
>>
>> Первый и второй location отличаются между собой только тем,
>> что в первом используется неименованное выделение $1,
>> а во втором - именованное выделение $title.
>>
>> И в то же время получаем такие разные результаты. Почему так?

> Потому что подстановка $1 делается из раскодированного URI
> запроса, и nginx знает, что данные в ней следует экранировать. А
> $title - произвольная переменная, и как и любая произвольная
> переменная - подставляется в предположении, что данные в ней
> корректно экранированы.
>
> В частности из-за этой магии обычно рекомендуют использовать
> return, где никакой подобной магии нет. Но если речь идёт о
> изменениях URI с необходимостью снятия/восстановления
> экранирования - это один из наиболее простых путей.

Понятно, спасибо.

Можно ли научить nginx, чтобы он писал в лог warn в том случае, если он
отправляет клиенту редирект с URI, который не соответствует требованиям
RFC 3986, например, когда там незакодированный текст на русском языке?

Например, можно ли сделать фильтр на njs, который будет проверять
все отправляемые клиенту редиректы и писать в лог warn в случае
ошибок в кодировании URI?

Можно ли в документации к nginx написать о той магии, которая есть
в директиве rewrite, в частности с автоматическим кодированием $1,$2,$3
и отсутствии автоматического кодирования обычных переменных?

Можно ли научить nginx, чтобы он делал warning во время парсинга
и проверки конфига в том случае, если в левой и в правой части
директивы rewrite присутствует одно и то же именованное выделение?

Или же, вместо этого, сделать магию не только с $1,$2,$3
но и с именованными выделениями, если одна и та же переменная
присутствует и в левой и в правой части директивы rewrite ?

Тогда location /wiki1/ и /wiki2/ будут вести себя идентично.
Чем меньше будет в nginx подобных подводных камней - тем меньше
он будет похож на sendmail в плане конфигурирования и использования.

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

Gena Makhomed June 17, 2019 11:32PM

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

Maxim Dounin June 18, 2019 04:28AM

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

Gena Makhomed June 18, 2019 06:28AM

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

Maxim Dounin June 18, 2019 07:10AM

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

Gena Makhomed June 18, 2019 08:14AM

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

Maxim Dounin June 18, 2019 08:28AM

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

Gena Makhomed June 18, 2019 09:46AM

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

Maxim Dounin June 19, 2019 07:58AM

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

Gena Makhomed June 19, 2019 09:48AM

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

Evgeniy Berdnikov June 19, 2019 07:34PM

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

Gena Makhomed June 20, 2019 12:26AM

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

Evgeniy Berdnikov June 20, 2019 03:56AM

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

Gena Makhomed June 20, 2019 04:44AM

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

Evgeniy Berdnikov June 20, 2019 05:30AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 305
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready