root контекст с предпочтением над регулярным выражением - PullRequest
0 голосов
/ 10 июля 2020

Я прочитал документацию и мне кажется, что она такая же, как здесь введите здесь описание ссылки , но во время моих тестов контекст root имеет приоритет над контекстом регулярного выражения.

Кто-нибудь знает причину?

См. Мой файл nginx .conf и тестовый curl, который я сделал для проверки конфигурации:

http {
    server {
        listen 80;
        root  /usr/share/nginx/html;
        include /etc/nginx/mime.types;
                                      
        location ~ /ui(/.*) {
            try_files $1 $1/ @htmlext;
        }                             
         
        location @htmlext {
            rewrite ^/ui(/\w*)(/.*)*$ $1.html last;
        }                                          
         
        location / {
            return 301 /ui$request_uri;
        }
    }
}

/ # curl -v http://localhost/ui/message?msg=error.forbidden
*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /ui/message?msg=error.forbidden HTTP/1.1
> Host: localhost
> User-Agent: curl/7.67.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.19.0
< Date: Thu, 09 Jul 2020 22:34:49 GMT
< Content-Type: text/html
< Content-Length: 169
< Location: http://localhost/ui/ui/message?msg=error.forbidden
< Connection: keep-alive
< 
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.19.0</center>
</body>
</html>
* Connection #0 to host localhost left intact

Как вы можете видеть в curl это перенаправляет мою страницу / ui / message вместо ее отображения. Если я удалю местоположение / из конфигурации, оно будет работать, если я удалю местоположение @htmlext и добавлю это logi c в местоположение ~ /ui(/.*) вроде тоже работает. Тогда я думаю, что причина моей ошибки - перенаправление @htmlext.

Кто-нибудь знает почему?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...