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

.htaccess重定向异常:访问example.com/en/drive自动跳转至example.com/en

解决.htaccess重定向异常:访问目录路径跳转到根语言目录的问题

我来帮你搞定这个奇怪的重定向问题!首先咱们拆解下你的问题:访问example.com/en/drive时自动跳去example.com/en/,但加了index.php就能正常加载,这说明核心问题出在目录路径的重写/重定向规则冲突或者服务器默认行为被干扰上。

先分析你的现有.htaccess规则问题

先看你当前的代码:

RewriteOptions inherit
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
<IfModule mod_rewrite.c>
RewriteRule ^$ /en/ [R=301,L]
</IfModule>
DirectoryIndex home.html index.htm index.html index.php

这里有几个可能的触发点:

  • RewriteOptions inherit的干扰:这个指令会让当前.htaccess继承上级目录甚至服务器全局的重写规则,如果上级目录里有针对/en/drive的重定向规则,就会导致异常跳转。
  • 根路径重写规则的匹配范围:RewriteRule ^$ /en/ [R=301,L]里的^$在.htaccess语境下,有时候会被误匹配(比如服务器解析路径时的上下文问题),改成^/?$能更精准匹配网站根目录的空请求(也就是直接访问example.com/的情况)。
  • 浏览器缓存的锅:因为你用的是R=301永久重定向,浏览器会缓存这个跳转规则,哪怕你后来改了规则,浏览器还是会按旧缓存跳转。

具体解决方案步骤

1. 先排除缓存干扰

先打开浏览器的隐私/无痕模式测试example.com/en/drive,或者清空浏览器缓存后再试。如果是缓存问题,这一步就能解决。

2. 调整.htaccess规则

把你的.htaccess改成下面这样,同时注释掉可能干扰的RewriteOptions inherit(如果不需要继承上级规则的话):

# 先注释掉inherit,排查是否是上级规则干扰
# RewriteOptions inherit
RewriteEngine On

# HTTP转HTTPS的规则,保持不变
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# 精准匹配网站根目录,跳转到/en/
<IfModule mod_rewrite.c>
RewriteRule ^/?$ /en/ [R=301,L]
</IfModule>

# 确保目录自动加斜杠的功能开启
DirectorySlash On
# 保持默认目录索引
DirectoryIndex home.html index.htm index.html index.php

3. 检查是否有其他.htaccess干扰

去/en/drive目录下看看有没有自己的.htaccess文件,如果有,里面的规则可能会导致跳转,把它暂时重命名(比如改成.htaccess.bak)再测试。

测试验证

改完规则后,先重启Apache(如果有条件的话),然后用隐私模式访问example.com/en/drive,应该就能正常加载index.php而不会跳转到/en/了。

内容的提问来源于stack exchange,提问作者Asghar Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:57