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

如何让.htaccess规则同时适配根目录与子目录的index.php?

修改.htaccess规则实现子目录适配需求

要实现请求匹配对应子目录index.php、无对应子目录时走根目录index.php的需求,你可以在原有规则基础上新增优先匹配子目录的规则,具体修改后的代码如下:

# 强制跳转至HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 优先适配存在的子目录(子目录下需包含index.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f
RewriteRule ^([^/]+)/(.*)$ $1/index.php [QSA,L]

# 无对应子目录时,转发至根目录index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

规则说明:

  • HTTPS跳转规则:和原代码一致,确保所有请求都使用HTTPS协议。
  • 子目录匹配规则:
    1. 先判断请求的不是真实存在的文件,避免干扰静态资源访问。
    2. 检查请求路径的第一个分段(比如请求/blog/post时,$1就是blog)对应的子目录下是否存在index.php。
    3. 如果满足条件,就将请求转发到该子目录的index.php,同时保留原查询参数(QSA标记),并终止后续规则执行(L标记)。
  • 根目录 fallback 规则:当请求路径没有匹配到任何存在的子目录时,就会执行这条规则,和原逻辑一致,转发到根目录的index.php。

注意事项:

  • 确保你创建的子目录下确实存在index.php文件,否则这条子目录规则不会生效。
  • 如果你需要支持多级子目录(比如/blog/article/detail),可以将子目录匹配规则的正则修改为^([^/]+/[^/]+)/(.*)$,同时调整对应的条件判断为%{DOCUMENT_ROOT}/$1/index.php -f,不过大部分场景下一级子目录的规则就足够使用。
  • 测试前建议清空浏览器缓存,避免之前的301跳转缓存影响测试结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:12:42