我需要从 提供 CodeIgnitor 服务/app/rsvp/dev/admin
。
所有请求到/admin应附加到 /admin/index.php(静态资产除外)。主站点文件位于/app/rsvp/dist
(也是 PHP)中。
Alias 似乎最有意义,但 alias/try_files 组合是长期存在的错误。我尝试过建议的解决方案,但目前都没有效果。
正如评论者所建议的,嵌套的根值和第二个 php 位置确实部分起作用。我认为问题现在出在 try_files 值上。
如下所示,对 /admin/screenings/index 的请求在脚本日志中显示以下内容 -
log_format scripts '$request $status > $document_root$fastcgi_script_name ? $query_string';
获取 /admin/screenings/index HTTP/1.1 502 > /apt/rsvp/dev/admin/index.php ? /admin/screenings/index
有趣的是,返回的状态是 502。主站点没有收到此错误。
有没有办法调试位置块(除了脚本日志)?比如哪些位置块受到请求的影响。
server {
listen 80;
server_name _;
root /app/rsvp/dist;
index index.php;
location ^~ /admin {
root /app/rsvp/dev;
try_files $1 /admin/index.php?$request_uri;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000; # docker
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000; # docker
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
答案1
我将使用以下内容:
location ~ ^/admin(.*)$ {
root /app/rsvp/dev;
try_files $1 /admin/index.php?$request_uri;
}
这里我们捕获 URL 路径的结尾到一个变量,并将其用作try_files
文件路径。