生产环境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
相关产品推荐
相关产品推荐

