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

生产环境Apache部署Symfony5访问仅显示PHP源码不执行怎么办?

问题原因排查及解决方法

1. 确认PHP模块已安装并在Apache中启用

  • 首先检查是否安装了对应版本的PHP Apache模块,Debian/Ubuntu系执行apt install libapache2-mod-php php-xml php-mbstring,CentOS/RHEL系执行yum install php php-apache php-xml php-mbstring
  • 执行a2enmod php8.x(将x替换为实际使用的PHP版本号)启用PHP模块,之后执行systemctl restart apache2(部分发行版服务名为httpd)重启服务生效

2. 检查Apache站点配置是否正确指向Symfony入口

Symfony5的入口文件为项目public目录下的index.php,站点配置必须将文档根目录指向public文件夹,同时配置PHP文件处理器,参考配置如下:

<VirtualHost *:80>
    ServerName example.com
    # 必须指向Symfony项目的public目录,禁止指向项目根目录
    DocumentRoot /path/to/your/symfony/project/public

    <Directory /path/to/your/symfony/project/public>
        AllowOverride All
        Require all granted
        # 配置index.php为默认索引文件
        DirectoryIndex index.php

        # 配置Apache处理PHP后缀文件
        <FilesMatch \.php$>
            SetHandler application/x-httpd-php
        </FilesMatch>
    </Directory>

    # Symfony推荐重写规则,确保所有请求都走入口文件
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</VirtualHost>
  • 配置修改完成后执行apache2ctl configtest检查语法是否正确,无报错再重启Apache服务
  • 确保项目目录权限配置正确,Apache运行用户(通常为www-data、apache)拥有目录读取、文件执行权限

3. 检查.htaccess配置是否生效

  • 如果你使用.htaccess管理重写规则,首先确认上一步站点配置中的AllowOverride All已开启,否则.htaccess规则不会生效
  • 确认public目录下存在Symfony自带的.htaccess文件,丢失可执行composer require symfony/apache-pack重新生成

4. 排查PHP-FPM配置(仅针对使用PHP-FPM而非mod_php的场景)

  • 确认Apache的proxy_fcgi和proxy模块已启用,执行a2enmod proxy proxy_fcgi即可启用
  • 在站点配置中添加对应FPM处理器配置,参考示例:
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php/php8.x-fpm.sock|fcgi://localhost"
</FilesMatch>
  • 确认PHP-FPM服务正常运行,sock文件路径和配置完全一致,且Apache用户拥有该sock文件的访问权限

内容的提问来源于stack exchange,提问作者Carlos Sáez Alfonsea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:06:05