server {
listen 80;
server_name xxxxx.cn;
root /alidata/www/xxxx;
index index.php index.html index.htm;
location / {
index index.htm index.html index.php;
if (!-e $request_filename){
#地址作为将参数rewrite到index.php上。tp框架接收s参数为controller和action,不少框架都利用这种方式来实现伪pathinfo模式(pathinfo为php功能,nginx并不支持)
rewrite ^/(.*)$ /index.php?s=$1 last;
break;
}
}
#上面的正则能解决不带xx.php的,这条正则是为了rewrite url中带index.php/admin/admin/login这种,思路是一样的,将index.php后的字符串当成参数
#location ~ /.*\.php/ {
# rewrite ^(.*?/?)(.*\.php)(.*)$ /$2?s=$3 last;
#break;
#}
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #开启pathinfo
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log /alidata/log/nginx/access/diancan.log;
}
PS:
1、在上文中配置规则中一种是携带index.php ,一种是不需要的二者选其一即可,PATHINFO带index.php,REWRITE则不带index.php。
2、如果项目为二级文件夹或者是多项目则需要修改红色的框中对应蓝色框部分。如果是一级文件夹则蓝色框不需为上边代码。
3、解决NGINX PHP "No input file specified"报错问题?
更改php.ini
首先php.ini的配置中把
;cgi.fix_pathinfo=0 改为
cgi.fix_pathinfo=1