我试图configuration我的nGinx服务器(在Debian Wheezy框中)来服务我的小型PHP应用程序。 我有路由问题。
我需要什么:
/ – 不允许使用PHP,只是.html文件
/ api – 所有内容都转到/api/index.php,包括/ api / method1,/ api / method2等
就这样。
我现在有什么:
server { listen 3000; root /home/my_user/php/my_app; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { try_files /index.html =404; } location /api { try_files /index.php =404; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
什么工作:
/给我/home/my_user/php/my_app/index.html,没关系。
/ api给我404,这不好(它应该去/api/index.php文件)。 / api / foo也是一样。 (是的,文件/api/index.php存在,并且每个人都可读,就像api /子目录一样。)
/api/index.php给我404(但不同的一个,我不知道,发生了什么事)。
根据我发现的nginx / php教程,一切都应该没问题。 事实并非如此。
我应该如何configuration我的nginx?
你的configuration可以简化。
server { listen 3000; root /home/my_user/php/my_app; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location /api/ { try_files /api/index.php =404; fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; } }
首先,静态文件只是默认的nginx行为,不需要有一些特殊的块。 index指令足以使nginxsearchindex.html 。
要将/api/something任何请求映射到/api/index.php您应该使用完整path作为try_files构造从root指令到文件的path。 此外fastcgi指令应该在这个位置,因为如果try_filesfind文件,它在当前的上下文中处理,即内部location /api/ 。
由于“不允许PHP” ,所以不需要location ~ .*\.php$ 。