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

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入口文件处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:23