我有这个定义的别名(它的最新迭代):
location ~ /xxx/(.*).php($|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /xxx/web/blog/xxx/$1.php;
include fastcgi_params;
}
location ~ /xxx(.*) {
autoindex on;
alias /xxx/web/blog/xxx$1;
}
xxx
尝试在的目录中定义一个 wordpress 安装xxx.com
(例如)。
现在,当我取出 PHP 路径时,我会将 index.php 文件下载到我的计算机上,但是一旦我添加 PHP fpm(如 php 位置所定义),我就会得到:
FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应头
在日志中。我尝试过在错误日志中使用调试模式,但一切看起来都很好。
我确实有一个 php 位置已经在执行:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $uri =404;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /xxx/web/live/backend/web/$fastcgi_script_name;
include fastcgi_params;
}
/xxx/web/blog/xxx/$1.php
我已经检查了使用的输出return 200 "/xxx/web/blog/xxx/$1.php";
并且它看起来很完美。
我应该补充一点,我在 SE 上搜索了大约 3 个小时,但没有一篇文章能真正解决我的问题,其中包括:
- https://stackoverflow.com/questions/8300022/nginx-serving-a-directory-as-an-alias
- https://stackoverflow.com/questions/21399789/nginx-how-to-create-an-alias-url-route
- Nginx 1 FastCGI 在 stderr 中发送:“主要脚本未知”
- 调试 nginx 配置文件的最佳方法?
那么这为什么不起作用呢?
答案1
好的,所以我决定回到基础,并将我的代码深入到:
location /xxx {
autoindex on;
alias /xxx/web/blog/xxx;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
我不知道为什么,但是它有效,我相当确定我已经尝试过一些非常接近的东西。
我以为这是因为我添加了:try_files $uri $uri/ /index.php?$args;
但后来我删除了它,它仍然有效。
如果有人可以解释别名和其中的 PHP 如何更好地工作以及为什么它对我来说不起作用,那么我会接受这个答案,因为这实际上就是问题所在。