当我写入位置时,它可以工作,当我使用与重写规则相同的位置时,它却不行!我不明白其中的逻辑。有人能解释一下吗?
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
这是预期的行为。在由正则表达式别名定义的位置中定义完整路径,因此您必须使用:
location ~ ^/(v\d+)/(.*) {
alias /var/www/api/$1/html/$2;
return 200 "request_filename: $request_filename";
}