因此我在 nginx 上有这两个位置块:
location / {
try_files $uri $uri/ /index.php$is_args$args;
add_header Access-Control-Allow-Origin *;
}
location /v1/merchants {
root /var/www/public/api-merchants;
try_files $uri $uri/ /index.php$is_args$args;
}
location /
路由到正确的index.php
,但location/v1/merchants
应该重定向到/var/www/public/api-merchants/index.php
,但它重定向到相同index.php
的location /
我究竟做错了什么?
答案1
该语句的最后一个元素try_files
是 URI。所需脚本的 URI 大概是/v1/merchants/index.php
。请参阅这个文件了解详情。
如果文件位于/var/www/public/api-merchants/index.php
,则应使用alias
指令 而不是root
指令。请参阅这个文件了解详情。
您无法在此新根目录中执行 PHP 文件,因此您现有的location ~ \.php
位置块将接管。您需要使用嵌套位置块并复制您的 PHP 语句(例如fastcgi_pass
在其中复制您的 PHP 语句(例如)。此外,使用^~
修饰符来防止其他location ~ \.php
位置块接管。请参阅这个文件了解详情。
例如:
location ^~ /v1/merchants {
alias /var/www/public/api-merchants;
if (!-e $request_filename) { rewrite ^ /v1/merchants/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass ...;
}
}