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

为何.htaccess重定向规则在子目录下无法生效?

问题原因及解决办法

原因

Apache的mod_rewrite默认不会将上级目录(根目录)的Rewrite规则自动继承到子目录。由于/d/目录下的.htaccess启用了RewriteEngine On,但未配置规则继承,导致根目录的重定向规则无法作用于/d/目录下的请求,所以针对/d/index.php?Itemid=111&board=100.300的重定向失效。

解决办法

方法一:让子目录继承根目录规则

在/d/.htaccess中添加RewriteOptions inherit,修改后的配置如下:

RewriteEngine On
RewriteOptions inherit
RewriteBase /d/
RewriteRule ^$ index.php [R=301,L]

此配置会让/d/目录的请求先应用根目录的Rewrite规则,再执行自身规则,根目录的重定向逻辑即可正常触发。

方法二:在子目录中添加重定向规则

直接将根目录的重定向规则复制到/d/.htaccess中,修改后的内容如下:

RewriteEngine On
RewriteBase /d/

# 处理Itemid=111的重定向
RewriteCond %{QUERY_STRING} (.*)Itemid=111&(.*) [NC]
RewriteRule .* /d/index.php?%2 [R=301,L]

RewriteRule ^$ index.php [R=301,L]

这样/d/目录的请求会直接触发自身配置的重定向规则,无需依赖根目录的设置。

方法三:修改根目录规则(不推荐)

若不想修改子目录的.htaccess,可调整根目录规则并添加循环防护,但这种方式容易引发问题,仅作为备选:

# 排除已处理的请求,避免循环重定向
RewriteCond %{QUERY_STRING} !(.*)Itemid=111(.*) [NC,OR]
RewriteCond %{REQUEST_URI} ^/d/index.php$
RewriteRule .* - [L]

# 原重定向规则
RewriteCond %{QUERY_STRING} (.*)Itemid=111&(.*) [NC]
RewriteRule .* /d/index.php?%2 [R=301,L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:53:20