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