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

Apache 2.4下.htaccess配置:禁止访问vendor目录但允许SCSS文件

Apache 2.4 .htaccess 配置:限制/vendor/访问但允许SCSS文件

你的现有配置问题分析

第一个配置的错误点

  • <Files ".scss"> 只会匹配**文件名就是.scss**的文件,不会匹配xxx.scss这类后缀为scss的文件,正确写法应该用<FilesMatch "\.scss$">来匹配后缀。
  • <Files ".*"> 仅匹配隐藏文件(文件名以.开头的),普通文件比如vendor/autoload.php不会被这个规则覆盖,所以能正常访问,这就是所有文件还能打开的原因。
  • 指令顺序逻辑有误:应该先默认拒绝所有,再允许SCSS文件,否则拒绝规则会覆盖允许规则。

第二个配置的错误点

  • .htaccess文件里不能使用<Directory>指令,这个指令只能放在Apache主配置文件(httpd.conf)或虚拟主机配置中,在.htaccess里用会直接触发500内部错误。
  • deny from all/allow from是Apache 2.2的语法,2.4版本已用Require指令替代,混用也可能导致错误。

正确的配置方案

方案1:用<If> + <FilesMatch>(推荐)

直接在项目根目录的.htaccess里添加以下规则:

<If "%{REQUEST_URI} =~ m#^/vendor(/.*|$)#">
    # 默认拒绝所有访问
    Require all denied

    # 允许所有SCSS文件
    <FilesMatch "\.scss$">
        Require all granted
    </FilesMatch>
</If>

逻辑说明:先对所有请求/vendor/路径的资源默认拒绝,再单独放开后缀为.scss的文件。

方案2:用mod_rewrite(如果开启了rewrite模块)

如果服务器开启了mod_rewrite,也可以用rewrite规则实现:

RewriteEngine On

# 匹配/vendor/下非SCSS的文件,拒绝访问
RewriteRule ^vendor/(.*)\.(?!scss$)[^.]+$ - [F,L]

# 禁止直接访问/vendor/目录(可选,增强安全性)
RewriteRule ^vendor(/.*|$) - [F,L]

逻辑说明:第一个规则匹配/vendor/下所有后缀不是scss的文件,返回403;第二个规则禁止直接访问/vendor/目录本身。

验证注意事项

  • 确保Apache 2.4的mod_authz_core模块已启用(默认是启用的)。
  • 测试时可直接访问yourdomain.com/vendor/somefile.scss确认能正常加载,访问yourdomain.com/vendor/somefile.php应该返回403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:52:21