解决thinkphp5模块不存在index.php/index问题

前言
在服务器上运行thinkphp时,会出现模块不存在:index或者模块不存在:index.php的问题

服务器环境:
系统:CentOS 7 x64
nginx:1.12.2

thinkphp版本:5.1


修改nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
location / {
index index.php index.html;

# 重写url
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}

location ~ .+\.php($|/) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;

# 设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}

重启nginx,就可以了。


由于这样可能会导致cgi.fix_pathinfo漏洞,详细可以看这篇文章Nginx + PHP CGI的一个可能的安全漏洞
所以需要需改php.ini文件。

1
2
3
4
5
6
7
8
9
# 查找php.ini文件
sudo find / -name 'php.ini' # 打印出/etc/php.ini
# 编辑php.ini
sudo vi /etc/php.ini
# 查找
# cgi.fix_pathinfo=1
# 将其改为
# cgi.fix_pathinfo=0
# 后保存


  • 参考文章


解决thinkphp5模块不存在index.php/index问题
作者
墨陌默
发布于
2019年1月3日
许可协议