nginx:try_files找不到静态文件,回退到PHP

相关configuration:

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; } } 

我绝对在/home/me/myapp/www有一个文件foo.html ,但是当我浏览到/myapp/foo.html它由PHP处理,这是try_files列表中的最后一个回退。

为什么发生这种情况?

如果您浏览到/myapp/foo.html检查/home/me/myapp/www/myapp/foo.html的文件。 当它没有find它时,它将继续到try_files列表中的回退。

如果您需要Nginx检查/home/me/myapp/www/foo.html的文件,那么您需要在您的用例中使用alias而不是root 。 这是解决scheme…

 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; } } 

请注意,有一个长期的错误 , aliastry_files不能一起工作。 另外请注意,使用alias可能会破坏configuration的其他部分,例如PHP处理!