最近在本地测试一款源码,为了更加准确的测试源码的真实情况,特意安装了当下最常用的Web服务管理系统,宝塔面板,测试使用的操作系统是Windows 10,在安装完宝塔面板后,用Nginx创建网站时发现,当源码安装配置完成后,访问后台时出现了404无法访问的错误,一开始以为是伪静态规则错误,于是开始检查伪静态规则,由于这款测试的源码是基于thinkPHP开发的,于是启用了宝塔面板自带的thinkPHP伪静态规则,保存后,刷新网站发现还是404。又检查了其他的页面,发现除了首页显示正常,其他页面都是404。
经过一番研究排查,又查了相关资料,终于找到了可用的解决办法:
方法1:更换你的PHP版本为8.0以上,经测试发现,这种问题在php 5.2 ~ php 7.4版本都会出现。只有在php8.0及以上版本时,这种问题才会消失。
方法2:如果你不想换成php8.0及以上版本的话,可以通过修改Nginx的配置文件来解决。
步骤如下:
首先,进入宝塔面板的“软件商店”中找到源码程序使用的PHP版本,我这里用的是php7.4,这里就以此为例。快速查找方法:在“应用分类”中选中运行环境,或直接搜索“PHP”,然后找到对应的PHP版本,点击“设置”。
其次,打开设置后,先选中“配置修改”选项,查看下“pathinfo”是否开启,至于为什么后面会给你分析出现这种错误的原因,这里先讲下解决方法,毕竟这才是最主要的,记住,pathinfo一定要是开启状态哦!不是的话,开启下,保存后再刷新下看看。
接下来就是重头戏,修改Nginx配置文件,我们打开“网站”,找到源码程序搭建的网站域名,点击右侧的“设置”。如下图:
在打开的设置页面中点击“配置文件”,再查找(Ctrl+H)“PHP-INFO-START”,把“PHP-INFO-START”与“PHP-INFO-END”之间的内容替换到,注意先把源内容备份下,以防万一。修改的内容如下:
#PHP-INFO-START
location ~ \.php(.*)$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:20074;
fastcgi_index index.php;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#将文件地址赋值给变量 $real_script_name
set $real_script_name $1;
#将文件地址后的参数赋值给变量 $path_info
set $path_info $2;
}
#配置fastcgi的一些参数
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
include fastcgi_params;
}
#PHP-INFO-END
修改完成后,保存。
最后添加伪静态规则,如果你之前已经正确添加了,此步可跳过。我这里直接用宝塔官方准备的thinkPHP伪静态规则。最后刷新之前所有404的页面,看看,是不是都能正常打开了!
附出现这种404状况的原因:
我们在安装基于thinkPHP框架的源码时,pathinfo模式无效,$_SERVER[‘PATH_INFO’] 都是没有值的,这导致所有依赖 PATH_INFO的PHP框架、路由都会出现404错误。而在php8.0及以上版本中,$_SERVER[‘PATH_INFO’] 都能正常取值,因此不会出现404的问题。
PS:这种问题通常会出现在基于thinkPHP框架的源码中,如苹果CMS(MacCMS) ...
暂无评论内容