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

Symfony 6.4项目创建首个控制器后访问出现404错误求助

问题描述

我正在创建一个新的Symfony(6.4)项目,使用命令symfony new --webapp web创建项目,接着通过symfony console make:controller WebController生成首个控制器。控制器代码如下:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class WebController extends AbstractController
{
    #[Route('/web', name: 'app_web')]
    public function index(): Response
    {
        return $this->render('web/index.html.twig', [
            'controller_name' => 'WebController',
        ]);
    }
}

访问localhost能正常显示Symfony欢迎页,但访问localhost/web时出现404错误,按照Symfony官方“首个控制器”教程操作也出现同样问题。

我使用的环境是WSL2中的Ubuntu 22.04与Apache2,相关配置如下:

  • /etc/apache2/sites-available/000-default.conf配置:
DocumentRoot /home/honi/git/web/web/public
  • /etc/apache2/apache2.conf配置:
<Directory /home/honi/git/web/web/public>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

请问问题出在哪里?我是否遗漏了什么配置?


问题原因与解决方案

核心问题是Apache未配置URL重写规则,Symfony的路由依赖重写将请求转发到public/index.php,当前配置缺少这部分关键设置,修复步骤如下:

  1. 启用Apache的rewrite模块
    在WSL终端执行命令:
sudo a2enmod rewrite
  1. 修改Apache目录配置,允许.htaccess生效
    编辑/etc/apache2/apache2.conf中的目录配置,把AllowOverride None改为AllowOverride All:
<Directory /home/honi/git/web/web/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
  1. 确认Symfony public目录存在.htaccess文件
    通过symfony new创建的项目,public目录默认会自带.htaccess文件(包含Symfony路由重写规则)。如果文件缺失,可手动创建:
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
  1. 重启Apache服务使配置生效
    执行命令:
sudo systemctl restart apache2

完成以上操作后,访问localhost/web即可正常加载控制器对应的页面。

内容的提问来源于stack exchange,提问作者honiahaka10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:51