如何通过Apache.htaccess配置仅允许域内指定来源访问目录
Apache .htaccess 按来源页限制目录访问配置
将以下规则写入mydomain.com/secretfolder目录下的.htaccess文件即可实现需求,无需修改站点根目录配置:
RewriteEngine On # 匹配非指定来源页的请求,NC标记代表不区分大小写匹配 RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain\.com/folder(/|$) [NC] # 所有不符合来源要求的请求直接返回403禁止访问,L标记代表停止执行后续规则 RewriteRule ^ - [F,L]
规则逻辑说明
- 开启Apache重写引擎后,首先校验请求的
HTTP_REFERER头(也就是记录用户跳转来源地址的字段) - 正则
^https?://(www\.)?mydomain\.com/folder(/|$)会精准匹配从http/https协议、带/不带www前缀的mydomain.com/folder路径(含该路径下所有子页面)发起的跳转请求,不会误匹配/folderfake这类前缀相似的路径 - 所有不满足上述来源匹配规则的请求都会被直接拦截返回403,覆盖两类需要禁止的场景:
- 用户直接在地址栏输入私密目录URL、从收藏夹打开私密目录:这类请求不会携带Referer头,会被直接拦截
- 用户从域名根路径、站点内其他非
/folder页面、外站跳转到私密目录:Referer不匹配白名单规则,会被拦截
配置调整提示
- 将代码中的
mydomain.com替换为实际域名,如果站点没有部署www子域,可以删掉规则里的(www\.)?段 - 将代码中的
/folder替换为实际指定的允许跳转的来源页面路径
注意:
HTTP_REFERER字段可以被浏览器插件、抓包工具伪造,这套规则仅适合做普通场景的访问门槛拦截,无法防御刻意的伪造请求攻击。如果私密目录存放的是高敏感资源,建议额外搭配服务端会话鉴权、用户权限校验逻辑做防护。
内容的提问来源于stack exchange,提问作者javier
相关产品推荐
相关产品推荐

