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,当前配置缺少这部分关键设置,修复步骤如下:
- 启用Apache的rewrite模块
在WSL终端执行命令:
sudo a2enmod rewrite
- 修改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>
- 确认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>
- 重启Apache服务使配置生效
执行命令:
sudo systemctl restart apache2
完成以上操作后,访问localhost/web即可正常加载控制器对应的页面。
内容的提问来源于stack exchange,提问作者honiahaka10
相关产品推荐
相关产品推荐

