.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
相关产品推荐
相关产品推荐

