Nginx 位置 $request_filename 没有根据重写规则正确设置

Nginx 位置 $request_filename 没有根据重写规则正确设置

当我写入位置时,它可以工作,当我使用与重写规则相同的位置时,它却不行!我不明白其中的逻辑。有人能解释一下吗?

   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

来自nginx 票证 #657

这是预期的行为。在由正则表达式别名定义的位置中定义完整路径,因此您必须使用:

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

相关内容