Symfony应用容器化后Apache配置疑问:页面NotFound无法访问路由
Symfony Docker化后Apache路由访问404问题解决
问题背景
将Symfony应用基于php:7.0-apache镜像Docker化后,容器能正常启动,但访问页面时返回NotFound,需调整Apache配置适配Symfony路由机制。
核心解决方案
对应PHP7.0版本的Symfony多为2/3系列,依赖Apache将请求转发到web/app.php(或app_dev.php)处理路由,需重点检查虚拟主机配置和重写规则。
1. 修正Apache虚拟主机配置
确保.docker/apache2/sites-available/vhost.conf正确设置DocumentRoot和URL重写规则,示例配置如下:
<VirtualHost *:80> ServerName localhost DocumentRoot /var/www/html/web <Directory /var/www/html/web> AllowOverride All Require all granted RewriteEngine On # 非静态文件请求转发至app.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- 关键说明:
- DocumentRoot必须指向Symfony的
web目录,这是应用的入口根目录 AllowOverride All允许启用URL重写规则- Rewrite规则确保所有非静态文件的请求都交给Symfony入口文件处理
- DocumentRoot必须指向Symfony的
2. 验证文件权限与存在性
- 确认
/var/www/html/web目录下存在app.php(生产环境)和app_dev.php(开发环境) - 确保文件权限正确,可进入容器执行以下命令二次验证:
docker exec -it <容器ID> chown -R www-data:www-data /var/www/html/web
3. 开发环境额外配置(访问app_dev.php时)
若需通过app_dev.php访问,需修改该文件的IP限制:
// 注释或调整IP白名单,允许容器所在网络访问 // if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) { // header('HTTP/1.0 403 Forbidden'); // exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); // }
4. 其他检查项
- 确认Apache rewrite模块已启用:进入容器执行
apache2ctl -M | grep rewrite,输出rewrite_module (shared)则正常 - 查看Apache日志排查具体错误:检查
.docker/apache2/logs/error.log,定位文件缺失、权限不足等问题
内容的提问来源于stack exchange,提问作者Bernardo Mantoan Castellani
相关产品推荐
相关产品推荐

