On 18.06.2019 11:27, Maxim Dounin wrote:

Есть такой фрагмент документации на директиву location:

      Синтаксис: location [ = | ~ | ~* | ^~ ] uri { ... }

      Для сопоставления используется URI запроса в нормализованном виде,
      после декодирования текста, заданного в виде “%XX”, преобразования
      относительных элементов пути “.” и “..” в реальные и возможной
      замены двух и более подряд идущих слэшей на один.

Есть такой фрагмент конфига:

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


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

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

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

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

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

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

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

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

?

Только в этом случае поведение nginx будет полностью соответствовать
RFC 3986 и более простого варианта решения этой задачи не существует?

--
Best regards,
 Gena

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

Ответить