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

如何用子目录.htaccess覆盖根目录FilesMatch规则以允许twig文件访问?

解决主题目录下Twig文件的访问权限问题

问题背景

主网站及shop子目录的Drupal站点根目录.htaccess均包含以下规则,直接拒绝访问.twig后缀的文件:

<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
  <IfModule !mod_authz_core.c>
    Order allow,deny
  </IfModule>
</FilesMatch>

主题目录已自定义.htaccess拒绝products.json和README.md的访问,现在需要允许同一目录下的cell.html.twig文件被访问,但此前添加的规则无法生效:

<Files cell.html.twig>
order allow,deny
allow from all
</Files>

解决方案

根目录规则同时适配了新的mod_authz_core模块和旧版权限指令,因此需要用对应指令覆盖两种场景。将以下规则添加到主题目录的.htaccess中(建议放在现有规则之前):

<Files cell.html.twig>
  <IfModule mod_authz_core.c>
    Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Allow from all
  </IfModule>
</Files>

原因说明

  • 多数现代Apache环境默认启用mod_authz_core模块,此时根目录用Require all denied限制访问,旧版Order/Allow指令不会生效,必须用Require all granted明确允许访问。
  • 针对未启用mod_authz_core的旧环境,保留Order allow,deny+Allow from all的规则确保兼容性。
  • Apache的.htaccess规则按顺序匹配,将允许规则放在前面可优先覆盖上级目录的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:15:44