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

根目录.htaccess无法忽略/other_cms及其子目录:问题排查求助

解决根目录.htaccess规则不作用于/other_cms路径的问题

咱们一步步拆解你遇到的问题,核心其实是两个点:根目录的排除规则没写对,以及子目录的.htaccess没被Apache读取,下面逐个解决:

一、修正根目录的Rewrite排除规则

你之前写的几条规则要么覆盖不全,要么条件判断有误,导致没达到预期效果:

  • 第一条RewriteRule ^other_cms/ - [L]只能匹配带末尾斜杠的路径(比如/other_cms/),但访问/other_cms(不带斜杠)时就不会触发这条规则,后续规则还是会执行
  • 你用RewriteCond %{REQUEST_URI} !^other_cms(/.*|)$时,忽略了%{REQUEST_URI}的值是以斜杠开头的(比如/other_cms/test),所以这个正则根本匹配不上,排除条件等于没加

最简洁有效的写法

直接在所有Rewrite规则的最顶部加这一条就够了,能覆盖/other_cms本身、/other_cms/、/other_cms/test等所有相关路径:

RewriteEngine On
# 匹配所有以other_cms开头的路径,直接跳过后续规则处理
RewriteRule ^other_cms(/.*)?$ - [L,NC]
  • ^other_cms(/.*)?$:正则里的(/.*)?是可选部分,既匹配不带斜杠的/other_cms,也匹配带斜杠的所有子路径
  • [L]:告诉Apache这是最后一条要执行的规则,匹配到就停止后续处理
  • [NC]:不区分大小写,避免路径大小写变化导致规则失效

如果你偏好用RewriteCond的方式

一定要记得给正则加上前导斜杠,因为REQUEST_URI天生带斜杠:

RewriteEngine On
# 只有当请求路径不是/other_cms及其子路径时,才执行后续规则
RewriteCond %{REQUEST_URI} !^/other_cms(/.*|)$
# 这里放你原本的其他Rewrite规则,比如和cms相关的规则
RewriteRule ^cms/(.*)$ ... [L]

二、让子目录的.htaccess生效

你在/other_cms里加的RewriteEngine Off没起作用,大概率是Apache的**AllowOverride配置被限制**了:

  1. 打开Apache的主配置文件(比如httpd.conf或者apache2.conf),或者你的虚拟主机配置文件,找到网站根目录的<Directory>块,确保AllowOverride设置为All,至少也要是FileInfo(因为RewriteEngine属于FileInfo类的指令):
<Directory "/path/to/your/website/root">
    AllowOverride All
</Directory>
  1. 修改完配置后,重启Apache服务,新配置才会生效

怎么验证是否解决?

  • 访问/other_cms/test,看看还会不会触发/cms相关的404错误
  • 可以在/other_cms/.htaccess里加个简单的测试规则,比如Redirect /other_cms/test /test-success,访问这个路径如果跳转到/test-success,说明子目录的.htaccess已经被读取了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:48:15