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

如何通过两个.htaccess解决根目录与子目录的index.php跳转异常

子目录非首页跳转根目录404的解决办法

问题

根目录和子目录分别安装了不同脚本,原本预期两个脚本各自指向对应目录的index.php,但访问子目录的非首页页面时,会跳转到根目录的404页面,仅子目录首页可正常访问。

当前配置

根目录.htaccess代码:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [L]
</IfModule>

子目录.htaccess代码:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?website\.it)$ [NC]
    RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

问题根源

根目录的.htaccess规则会拦截所有不存在的文件/目录请求,包括子目录下的非首页请求。比如访问/subdir/xxx时,该路径既不是文件也不是目录,根目录的规则会直接将请求重写到根目录的index.html,导致子目录的.htaccess没有机会处理请求。

修复方案

修改根目录的.htaccess,添加规则排除子目录的请求,让子目录的配置自行处理:

<IfModule mod_rewrite.c>
    RewriteEngine On
    # 将 "subdir" 替换为你的实际子目录名称
    RewriteRule ^subdir/ - [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [L]
</IfModule>

补充说明

  • RewriteRule ^subdir/ - [L]:匹配所有以子目录开头的请求,-表示不执行重写操作,[L]表示终止后续规则处理,确保子目录的请求直接交由子目录的.htaccess处理。
  • 若存在多个需要排除的子目录,可写成RewriteRule ^(subdir1|subdir2)/ - [L],用竖线分隔多个目录名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:27:34