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

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,关闭自动检测逻辑,强制基准路径为根目录:

  1. 注释掉自动BASE检测的两行代码:
# RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
# RewriteRule .* - [E=BASE:%1]
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:50:27