2

Когда я записываю местоположение в, оно работает, когда я использую то же местоположение, что и правило перезаписи, это не так !!! Я не понимаю логику. Может кто-нибудь объяснить, пожалуйста?

   location /v3/ {
            alias /var/www/api/v3/html/;
            echo $document_uri;
            echo $document_root;
            echo $request_filename;
            echo $request_uri;
            echo $fastcgi_script_name;
   }

Когда я делаю выше, я получаю

/v3/info.php
/var/www/api/v3/html/
/var/www/api/v3/html/info.php
/v3/info.php
/v3/info.php

Но если я сейчас изменю местоположение, чтобы использовать переписать:

   location ~ ^/(v\d+)/ {
            alias /var/www/api/$1/html/;
            echo $document_uri;
            echo $document_root;
            echo $request_filename;
            echo $request_uri;
            echo $fastcgi_script_name;
   }

Пути все испорчены:

/v3/info.php
/var/www/api/v3/html/
/var/www/api/v3/html/
/v3/info.php
/v3/info.php

Как так??

1 ответ1

3

Из билета nginx № 657:

Это ожидаемое поведение. В расположении, определяемом регулярным выражением, псевдоним определяет полный путь, поэтому вы должны использовать:

location ~ ^/(v\d+)/(.*) {
    alias /var/www/api/$1/html/$2;
    return 200 "request_filename: $request_filename";
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .