Apache 上的项目部署到 Nginx 后出现的问题及解决方法(404 错误、admin.php 模块不存在等)

Apache上的项目迁移至Nginx时遇到404错误和admin.php模块不存在的问题。404错误是由于Nginx配置中只处理.php结尾的URI,解决方法是修改Nginx配置并开启PHP的pathinfo模式。admin.php问题则是路径解析错误,通过Nginx重写规则解决了后台入口文件的访问异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一(404 错误):

 CI/TP 框架写的项目本地(WAMP)环境下运行没问题,将它上传到(LNMP)服务器时:

使用 xxx.com/index.php/home/index/ 就报 404 错误,

通过 xxx.com/index.php?c=home&m=index 能正常访问。

同样的,使用 xxx.com/index.php/ 访问也是一样,在 index.php 后多加一条 “/” 之后就无法解析了。

分析:

看 nginx 配置,其中正则解析 PHP 的这段代码:

        # 配置Nginx通过fastcgi方式处理PHP请求
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }   

可见,Nginx 在遇到 xxx.php 结尾的 URI 才会将请求交给 fastcgi 处理!否则因为正则匹配不到路径导致 404 报错。

解决:

原配置修改为:

        location ~ \.php(.*)$ {
            fastcgi_pass 127.0.0.1:9000; 
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            # 要开启 phpinfo 模式
            # 即去掉 php.ini 中 ;cgi.fix_pathinfo=1 的注释
            fastcgi_param PATH_INFO $1;
            include fastcgi_params;
        }  

并且!在 php.ini 中找到

;cgi.fix_pathinfo=1

去掉注释 ;

cgi.fix_pathinfo=1

这个过程,其实就只是开启 pathinfo 模式而已!

问题二(admin.php 模块不存在):

利用Nginx 重写规则,开启隐藏 index.php 之后:

if (!-e $request_filename){
    rewrite  ^(.*)$  /index.php?s=$1  last;   break;
}  

使用 xxx.com/admin.php/system/publics/index 就会抛出异常:模块不存在:admin.php

分析:

 实际上访问的路径是:xxx.com/index.php/admin.php/system/publics/index 

解决:

利用Nginx 重写规则如下:

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

如果访问的后台入口文件就交给admin.php这个入口文件进行处理。其他情况交给index.php这个入口文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值