Symfony 6中URL重定向至/public/index.php的原因及移除方法
Symfony 6在cPanel子域名下URL重定向及美化问题解决
问题原因
- 初始重定向到/public/index.php:cPanel默认将子域名的网站根目录指向你上传Symfony文件的主目录(而非Symfony的
public目录)。当你访问mydomain.com/page时,服务器在根目录找不到对应文件,只能引导到Symfony的入口文件public/index.php,但此时路由未被正确解析,所以需要手动追加/page才能访问。 - 装apache-pack后重定向到/public/page:安装
symfony/apache-pack后,public目录下的.htaccess生效,它自动移除了URL中的index.php,但服务器根目录仍未指向public,所以URL还是会保留/public前缀。
解决办法
方法一:修改子域名的文档根目录(推荐)
这是最规范的做法,直接让服务器把Symfony的public目录作为网站根目录:
- 登录cPanel后台,找到「子域名」管理选项
- 找到目标子域名,点击「修改」或「管理」按钮
- 将文档根目录路径从默认值(比如
public_html/your-subdomain)修改为public_html/your-subdomain/public - 保存设置后,直接访问
mydomain.com/page即可正常打开页面,URL不再包含/public或/index.php
方法二:添加根目录.htaccess转发(权限受限情况下)
如果无法修改cPanel的文档根目录,就在子域名的主目录(即你上传Symfony所有文件的目录)新建.htaccess文件,填入以下内容:
<IfModule mod_rewrite.c> RewriteEngine On # 将根路径转发到public目录 RewriteRule ^$ public/ [L] # 将所有请求转发到public目录处理 RewriteRule (.*) public/$1 [L] </IfModule>
该规则会把所有访问mydomain.com/*的请求自动转发到public目录,配合public目录原有的.htaccess规则,就能实现无/public和/index.php的干净URL。
验证
完成操作后,访问mydomain.com/page,应该直接显示随机生成的幸运数页面,URL保持干净无多余前缀。
内容的提问来源于stack exchange,提问作者L. core
相关产品推荐
相关产品推荐

