Apache从Alias迁移至VirtualHost后路由404与隐藏index.php问题
问题核心原因
路由404的根因是VirtualHost目录配置错误,和框架本身、域名解析无关:
- 你将
<Directory>块中的AllowOverride All注释,Apache不会读取/var/www/BaseCollDev/public目录下自带的Symfony框架重写规则,所有非真实存在的文件、目录请求不会被转发到index.php入口文件 - 配置中写了
-FollowSymlinks禁用了符号链接跟随权限,而mod_rewrite模块正常运行必须依赖该权限,重写规则完全无法执行 - 上层
/var/www目录设置了AllowOverride None,根目录下的WordPress重写规则不会生效,也不会接管当前应用的路由转发 - 首页能正常访问是因为请求根路径
/时Apache会自动查找DirectoryIndex指定的index.php文件,不需要重写规则介入,其他二级路径没有对应实体文件又没触发转发,就直接返回404。
修复操作步骤
- 修改VirtualHost配置文件
/etc/apache2/vhost.d/basecolldev-ssl.conf中的目录块,修正后的配置如下:
<Directory /var/www/BaseCollDev/public> Require all granted Options -Indexes -Includes -ExecCGI +FollowSymlinks AllowOverride All DirectoryIndex index.php </Directory>
配置说明:
- 取消
AllowOverride All的注释,允许Apache读取当前目录下的.htaccess重写规则 - 将
-FollowSymlinks改为+FollowSymlinks,给mod_rewrite提供必要运行权限 - 显式指定目录默认首页为
index.php,避免默认首页优先级异常
- 确认Apache重写模块已启用,OpenSUSE系统执行以下命令:
a2enmod rewrite
如果返回模块已启用的提示无需额外操作。
- 校验配置文件语法正确性,执行:
apache2ctl configtest
返回Syntax OK后重载Apache服务让配置生效:
systemctl reload apache2
其他日志404说明
你日志中两类404不属于路由配置问题,按需处理即可:
/_wdt/xxx路径是Symfony开发环境的调试工具条请求,生产环境关闭应用debug模式后就不会再发起这类请求/favicon.ico是网站图标请求,只要在public目录下放置对应命名的图标文件即可消除该报错,不影响业务功能。
验证
配置重载完成后直接访问https://basecolldev.mydomain.fr/login即可正常打开登录页,所有业务路径都不需要手动携带/index.php后缀,框架路由会自动正常转发。
内容的提问来源于stack exchange,提问作者wiltomap
相关产品推荐
相关产品推荐

