如何使用.htaccess隐藏public_html内存放css、js等资源的asset目录
静态资源目录安全防护操作方案
方案一:使用.htaccess实现访问控制(推荐)
该方案适配Apache服务器,无需修改项目代码引用路径,生效速度快。
操作步骤
- 进入你需要防护的asset目录,在目录根下新建名为
.htaccess的隐藏文件 - 根据你的实际需求选择对应配置写入文件:
需求1:禁止目录遍历、允许正常资源加载、禁止盗链
适合css、js、站点公开图片这类需要被页面正常加载的资源场景:
# 关闭目录列表展示,避免外部直接遍历所有目录文件 Options -Indexes # 配置仅允许你的站点域名引用资源,防止第三方盗链 SetEnvIf Referer "^https?://(www\.)?你的站点域名\.com" site_refer <FilesMatch "\.(css|js|png|jpg|jpeg|gif|webp|svg|ico)$"> Order Allow,Deny Allow from env=site_refer # 本地调试可额外放开本机访问:Allow from 127.0.0.1 </FilesMatch> # 禁止外部访问.htaccess文件本身 <Files .htaccess> Order Allow,Deny Deny from all </Files>
需求2:完全禁止外部访问该目录
适合存放非公开私有资源的场景,所有资源需要通过后端鉴权后转发读取:
Deny from all
方案二:目录随机重命名
该方案仅降低目录被扫描发现的概率,无法完全阻止路径泄露后的访问,建议和.htaccess搭配使用。
操作步骤
- 将原
asset目录重命名为无规律的随机字符串,例如asset_x3kP7mQ2 - 同步修改项目中所有引用该目录资源的路径为新的目录名称
- 若要进一步提升安全性,可同时在重命名后的目录下添加前述的.htaccess规则
注意事项
- .htaccess规则修改后无需重启Apache服务,即时生效
- 若配置盗链规则后出现资源加载异常,可先删除Referer相关配置,仅保留
Options -Indexes先完成目录遍历防护,再逐步排查域名配置问题
内容的提问来源于stack exchange,提问作者LaravelBeginer
相关产品推荐
相关产品推荐

