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
相关产品推荐
相关产品推荐

