我在Ubuntu服务器上使用NGINX。我有这个vhost:
server {
listen 80;
server_name *.example.com;
root /home/nginx/vhosts/example.com/web;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
我必须添加规则......
如果文件/目录未找到,请使用index.php
我怎样才能更改我的服务器{}指令?
谢谢!
答案 0 :(得分:12)
您可以使用try_files指令:
try_files $uri $uri/ /index.php
这将首先尝试查找文件和目录,如果这不起作用,它将使用index.php。
另请参阅nginx wiki上的front controller部分。
答案 1 :(得分:5)
Ikke是正确的,请像这样使用try_files:
location / {
try_files $uri $uri/ /index.php;
}
但是你的PHP fastcgi位置是不安全的。请参阅this article以了解更多相关信息。
对于您的设置,您需要具有以下内容:
location ~ \.php$ {
try_files $uri /index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9001;
}
请注意,在包含fastcgi_params全局配置后,您应该设置本地fastcgi_param
。
答案 2 :(得分:2)
您需要按照设置进行操作:
server {
listen 80;
server_name *.example.com;
root /home/nginx/vhosts/example.com/web;
location / {
index index.php;
}
location ~ \.php$ {
root /home/nginx/vhosts/example.com/web;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
希望能帮助你
答案 3 :(得分:1)
我在RH6和EC2上遇到了同样的问题,我通过在$document_root
中对fastcgi_param
进行硬编码来修复它。
希望它有所帮助。