我尝试仅对一个子目录(laravel目录)启用PHP,但是我没有设法使它起作用。 NGINX总是说404 File not found或php说“未指定输入文件”。我在做什么错了?
这是我的位置配置:
location /laravel {
root html/laravel/public;
index index.php index.html index.html;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
root html/laravel/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME document_root$fastcgi_script_name;
#include fastcgi_params;
include fastcgi.conf;
}
}
UDPATE 1 :似乎nginx无法正确评估我的位置表达式:
2018/09/12 16:30:44 [错误] 26476#24408:* 1 CreateFile()“ C:/Server/nginx/html/index.php”失败(2:系统找不到指定的文件),客户端:127.0.0.1,服务器:localhost,请求:“ GET / laravel / HTTP / 1.1”,主机:“ localhost”
这是错误的路径,至少是/位置的根:
location / {
root C:/Server/nginx/html;
index index.html index.htm index.php;
}
我试图移动块,但没有任何变化。
更新2 : 看来nginx的确很容易出错。该文档指出:
按指定顺序检查文件是否存在,并使用找到的第一个文件进行请求处理; 该处理是在当前上下文中执行的。文件的路径是根据根和别名指令从file参数构造的。可以通过在名称的末尾指定斜杠来检查目录是否存在。 “ $ uri /”。如果未找到任何文件,则将进行内部重定向到最后一个参数中指定的uri。
如我的错误日志所示,try_files指令不尊重根路径,因为它尝试打开相对于另一个位置块的文件。
答案 0 :(得分:1)
正如@Richard在链接的Stackoverflow线程中指出的那样,这似乎是nginx的错误。对我而言,此解决方案适用于nginx:
<script runat="server">.....abx xyz... </script>
来源:https://serversforhackers.com/c/nginx-php-in-subdirectory
答案 1 :(得分:1)
可能需要您进行一些更改和更新:
如果您想将laravel
项目放在具有subfolder
的服务器上的ngnix-ubuntu 16-php.7.2
中,那么这里是update ngnix config:
1)您嵌套的(子文件夹)不在主文件夹中
/var/www/main:
/var/www/nested:
然后配置:
location /nested {
alias /var/www/nested/public;
try_files $uri $uri/ @nested;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
location @nested {
rewrite /nested/(.*)$ /nested/index.php?/$1 last;
}
2)您主目录中的laravel-test文件夹(子文件夹):
/var/www/main:
/var/www/main/nested:
然后配置:
location /laravel-test {
alias /var/www/main/laravel-test/public;
try_files $uri $uri/ @laravelTest;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
location @laravelTest {
rewrite /laravel-test/(.*)$ /laravel-test/index.php?/$1 last;
}