Gena Makhomed
June 20, 2019 12:26AM
On 20.06.2019 2:33, Evgeniy Berdnikov wrote:

> IMHO, лучше было бы принять соглашение, что rewrite работает на уровне
> раскодированных URI и его результат подлежит кодированию.
> Для вставки уже кодированных строк понадобится функция декодирования,
> зато схема будет простой и предельно ясной.

Ваше предложение сломает обратную совместимость и огромное количество
корректно работающих в данный момент конфигураций. Не надо так делать.

Кроме того, процесс раскодирования сопровождается потерей информации,
так что в результате потом невозможно будет корректно закодировать урл.

Например, в этом коде найдете ошибку?

============================================================

Файл conf.d/example.com.js:

function encoded_title(r) {
return encodeURIComponent(r.variables.title);
}

Файл conf.d/example.com.conf:

js_include conf.d/example.com.js;
js_set $encoded_title encoded_title;

location ~ ^/wiki/(?<title>.*) {
return 301 https://$host/$encoded_title$is_args$args;
}

============================================================

Ошибка в том, что /wiki/some/other/uri
превращается в /some%2Fother%2Furi

также /wiki/User:Example
превращается в /User%3AExample

Корректно работать будет только такой код:

============================================================

Файл conf.d/example.com.js:

function request_uri_without_wiki_prefix(r) {
var request_uri = r.variables.request_uri;
if (request_uri.startsWith('/wiki/')) {
return request_uri.substring(5);
} else {
r.error('unexpected request_uri: ' + request_uri)
return request_uri;
}
}

Файл conf.d/example.com.conf:

js_include conf.d/example.com.js;
js_set $request_uri_without_wiki_prefix request_uri_without_wiki_prefix;

location /wiki/ {
return 301 https://$host$request_uri_without_wiki_prefix;
}

============================================================

Или тот вариант конфигурации, который предлагает Максим:

location /wiki/ {
rewrite ^/wiki/(.*) https://$host/$1 permanent;
}

--
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: 218
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