如何用.htaccess禁止目录直接访问且允许本站点内加载对应文件
解决方案
方法1:兼容Apache 2.2/2.4版本配置
替换pdf目录下的.htaccess内容为如下配置,将your-domain.com替换为你自己的站点域名即可:
AuthType Basic AuthName "Administrator" AuthUserFile /home3/nimabida/public_html/power-plant/src/.htpasswd Require valid-user SetEnvIf Referer "^https?://(www\.)?your-domain\.com" allowed_access Order Deny,Allow Deny from all Allow from env=allowed_access Satisfy any
配置说明
- 原有基础身份验证规则保留,直接输入PDF地址访问的用户仍然需要输入账号密码才可访问
SetEnvIf规则会识别请求来源,所有从你自己站点内发起的资源请求会被标记为允许访问,无需验证即可加载Satisfy any指令表示只要满足「身份验证通过」或「来自本站点请求」任意一个条件,就允许访问资源
方法2:Apache 2.4+ 简化写法
如果你的服务器Apache版本在2.4及以上,可以使用更简洁的表达式写法:
AuthType Basic AuthName "Administrator" AuthUserFile /home3/nimabida/public_html/power-plant/src/.htpasswd <RequireAny> Require valid-user Require expr %{HTTP_REFERER} =~ m#^https?://(www\.)?your-domain\.com# </RequireAny>
注意事项
- 极个别用户浏览器会禁用Referer请求头,这种场景下站内访问PDF也会触发验证,属于极小概率特殊情况
- 该方案依赖Referer头校验,无法完全避免刻意伪造Referer的爬虫爬取,若需要更高安全等级可配合会话Cookie校验规则使用
内容的提问来源于stack exchange,提问作者ebi sadeghi
相关产品推荐
相关产品推荐

