1. 问题
Windows服务器下使用宝塔面板配置 nginx 部署HkCms开源内容管理系统时,在没有开启伪静态格式的情况下、访问例如:xxxx.com/index.php/index/index等类似地址时,Nginx直接报404错误。在测试过程中发现nginx并没有转发去到php,所以有可能是nginx的phpinfo解析规则问题。
2. 解决
在宝塔后台去到网站页面打开设置打开配置文件,phpinfo使用的是以下配置文件,根据这个路径去到宝塔目录里面找到php/7.3conf文件。
#PHP-INFO-START
include php/73.conf;
#PHP-INFO-END
打开文件后里面的代码如下,下面是我修改后的配置,注释的是文件原有的配置,如果你使用的系统默认也是xxxx.com/index.php/index/index这种格式也是报404错误那么可以参考下面的代码修改。
location ~ \.php(.*)$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:20073;
fastcgi_index index.php;
#fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_INFO $fastcgi_path_info;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_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;
include fastcgi_params;
}
主要增加的是下面这块代码
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
保存并重启nginx后就能正常访问HkCms开源内容管理系统了。