引入
在使用Thinkphp的时候,项目在本地可以正常使用;但迁移到nginx后,会出现页面只能访问首页,其它页面出现404错误的问题。
这是因为TP默认采用的是pathinfo的URL访问模式(TP的URL访问模式可在手册中了解),而Nginx默认是没有开启pathinfo模式的,PHP默认也没有开启pathinfo的配置,所以访问时会出现错误。
pathinfo模式是怎样的模式呢?
例如:http://localhost/goodsLevel/index.php/Home/Index/index.html
上面的url就是采用pathinfo模式,特点如下:
1、路径中携带了入口文件index.php
2、在入口文件后跟随路径。格式一般为index.php/模块/控制器/方法/参数等
404页面出现原由
了解pathinfo模式后,我们就知道为什么Nginx环境下访问TP页面时出现404页面了。
因为按照常理来说,index.php后面跟随着路径,那么index.php就相当于一个文件夹了。但实际上又不存在index.php这个文件夹,所以如果没有开启pathinfo模式,那么这个路径解析就会报找不到文件。而只有在开启pathinfo模式之后,服务器才会去执行index.php这个文件。
Nginx配置phpinfo
1--配置php.ini,使php支持pathinfo
2--配置nginx.conf
在Nginx配置nginx.conf中的server加入以下配置
server
{
...
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1;
}
}
location ~ \.php {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi_params;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}
nginx.conf加入以上配置后,
lnmp restart重启即可。
Nginx下TP3.2页面访问404问题解决!!!