You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在RHEL 7部署旧版Angular/PHP应用遇资源解析错误及PHP无法正常处理的排查求助

在RHEL 7部署旧版Angular/PHP应用遇资源解析错误及PHP无法正常处理的排查求助

看起来你遇到的两个核心问题——Angular JS资源返回HTML导致解析报错、phpinfo.php返回首页——本质上是同一个根源:Apache没有正确处理PHP文件,同时路由规则把静态资源请求错误转发到了未被执行的PHP首页文件。下面一步步帮你排查:

一、先解决PHP无法被Apache处理的核心问题

你提到找不到mod_php7.c,这确实是关键。RHEL 7默认自带的是PHP 5.4,如果你需要PHP 7,大概率是通过Red Hat Software Collections(SCL)安装的rh-php7x系列包(比如rh-php72、rh-php74),这类包的模块路径和名称都不是默认的,所以你配置里的<IfModule mod_php7.c>根本不会生效(而且.c是源码文件,Apache实际加载的是编译后的.so模块)。

具体排查步骤:

  1. 先确认服务器上的PHP安装情况:
    # 检查已安装的PHP相关包
    yum list installed | grep php
    # 检查是否是SCL的PHP包
    yum list installed | grep rh-php
    
  2. 如果是SCL的PHP包,修改Apache配置加载正确的模块:
    以rh-php72为例,模块路径通常是/opt/rh/rh-php72/root/usr/lib64/httpd/modules/libphp72.so,把你的配置改成:
    # 先加载PHP模块
    LoadModule php7_module /opt/rh/rh-php72/root/usr/lib64/httpd/modules/libphp72.so
    # 替换原有的IfModule块
    <IfModule php7_module>
        AddType text/html .php
        DirectoryIndex index.php
        <FilesMatch \.php$>
            SetHandler application/x-httpd-php
        </FilesMatch>
        # 其他PHP相关配置(比如php_value)
    </IfModule>
    
    如果是默认的PHP 5.4,模块路径是/usr/lib64/httpd/modules/libphp5.so,对应修改LoadModule和<IfModule php5_module>即可。
  3. 测试PHP是否生效:
    创建一个简单的test.php,内容如下:
    <?php echo "PHP 运行正常!"; ?>
    
    访问这个文件,如果返回PHP 运行正常!,说明PHP处理已经正常;如果还是返回首页,那就要看路由重写的问题了。

二、解决Angular资源返回HTML的问题

之前请求angular.min.js这类文件返回HTML,大概率是因为你的Apache配置里有SPA应用常见的路由重写规则,但当时PHP没生效,导致index.php被当成静态文件返回。

排查步骤:

  1. 检查Apache配置(包括应用目录下的.htaccess,如果启用了AllowOverride)里是否有类似规则:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L]
    
    这个规则的作用是:如果请求的文件/目录不存在,就转发到index.php处理。当PHP生效后,这个规则会正常工作——存在的静态资源(JS/CSS)会直接返回,不存在的请求才会交给PHP处理。
  2. 同时确认Angular静态资源的路径正确,比如是否是相对路径,且文件确实存在于Apache的DocumentRoot目录下。

三、其他容易忽略的排查点

  • 查看Apache错误日志:/var/log/httpd/error_log或/var/log/httpd/*error.log里会有模块加载失败、PHP执行错误、路由重写的详细日志,这是排查问题最有效的工具。
  • 对比参考服务器的完整Apache配置:不仅要看你的自定义配置,还要检查/etc/httpd/conf/httpd.conf、/etc/httpd/conf.d/下的其他文件,比如是否启用了mod_rewrite模块(LoadModule rewrite_module modules/mod_rewrite.so)。
  • 检查SELinux状态:RHEL 7默认SELinux是Enforcing状态,可能会阻止Apache访问PHP文件或执行PHP。可以临时关闭测试(setenforce 0),如果问题解决,再配置SELinux规则(比如chcon -R -t httpd_sys_rw_content_t /你的应用目录路径)。
  • 确认目录权限:Apache运行用户(通常是apache或httpd)对应用目录有读权限,对PHP文件有读权限。

备注:内容来源于stack exchange,提问作者DysonC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:59:34