Symfony 6部署时根目录.htaccess致自动重定向至/public问题求助
Symfony 6根域名自动重定向到/public的解决方法
问题根源
根目录.htaccess将所有请求转发到public/index.php,但public目录默认的.htaccess里的自动BASE检测逻辑会错误识别请求路径,把/public当作基准路径,触发内置重定向规则,最终导致URL跳转到https://www.example.com/public。
修复方案
方案1:调整根目录的.htaccess
修改根目录的.htaccess,添加RewriteBase /并调整转发规则,避免public目录的BASE检测逻辑误判:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 根请求直接转发到public目录 RewriteRule ^$ public/ [L] # 非文件请求转发到public/index.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/index.php [L,QSA] </IfModule>
方案2:修改public目录的.htaccess
手动设置RewriteBase,关闭自动检测逻辑,强制基准路径为根目录:
- 注释掉自动BASE检测的两行代码:
# RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$ # RewriteRule .* - [E=BASE:%1]
- 添加手动指定的
RewriteBase:
RewriteBase /
修改后的public目录.htaccess核心部分如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On # 手动设置基准路径为根目录 RewriteBase / # 保留HTTP_AUTHORIZATION头 RewriteCond %{HTTP:Authorization} .+ RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] # 原有的去index.php重定向规则 RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] # 非文件请求转发到index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ %{ENV:BASE}/index.php [L] </IfModule>
额外优化(可选)
如果你的Apache版本≥2.3.9,建议把public目录.htaccess里所有L标志替换为END,并删除RewriteCond %{ENV:REDIRECT_STATUS} =""这一行,彻底避免循环重定向风险,同时提升规则执行效率。
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

