![nginx:try_files 未找到静态文件,因此返回 PHP](https://linux22.com/image/619783/nginx%EF%BC%9Atry_files%20%E6%9C%AA%E6%89%BE%E5%88%B0%E9%9D%99%E6%80%81%E6%96%87%E4%BB%B6%EF%BC%8C%E5%9B%A0%E6%AD%A4%E8%BF%94%E5%9B%9E%20PHP.png)
相关配置:
location /myapp {
root /home/me/myapp/www;
try_files $uri $uri/ /myapp/index.php?url=$uri&$args;
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}
我确实有一个文件foo.html
,/home/me/myapp/www
但是当我浏览/myapp/foo.html
它时,它由 PHP 处理,try_files
列表中的最终后备。
为什么会发生这种情况?
答案1
如果您浏览到/myapp/foo.html
,Nginx 会检查 处的文件/home/me/myapp/www/myapp/foo.html
。如果未找到该文件,则会继续查找try_files
列表中的后备文件。
如果您需要 Nginx 检查 处的文件/home/me/myapp/www/foo.html
,则您需要根据用例使用alias
而不是。以下是解决方案...root
location /myapp {
alias /home/me/myapp/www;
try_files $uri $uri/ /myapp/index.php?url=$uri&$args;
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}
请注意长期存在的错误和不能一起使用。另外,请注意使用可能会破坏配置的其他alias
部分,例如 PHP 处理!try_files
alias