所以我在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
应该redirect到/var/www/public/api-merchants/index.php
,而是redirect到相同的index.php
location /
我究竟做错了什么?
try_files
语句的最后一个元素是一个URI。 你想要的脚本的URI大概是/v1/merchants/index.php
。 详情请参阅此文件 。
如果文件位于/var/www/public/api-merchants/index.php
,则应该使用alias
指令而不是root
指令。 详情请参阅此文件 。
你没有办法在这个新的根目录下执行PHP文件,所以你现有的location ~ \.php
位置块将会被接pipe。 你需要使用一个嵌套的位置块,并复制你的PHP语句(例如fastcgi_pass
)。 此外,使用^~
修饰符来防止其他location ~ \.php
位置块接pipe。 详情请参阅此文件 。
例如:
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 ...; } }
由于这个问题,我避免使用具有alias
try_files
。 请注意使用if
注意事项 。