如何用.htaccess允许display.html访问图片并禁止图片直接访问?
解决方案
你的原配置问题出在<FilesMatch>块内嵌套<Files>指令无效——<FilesMatch>已经匹配了图片文件,里面的<Files "display.html">永远不会命中这些图片,导致所有图片请求都被拒绝。
可以通过检查请求的Referer头来实现需求:当图片请求来自display.html页面时允许访问,直接输入URL访问则拒绝。修改后的.htaccess配置如下:
# 关闭目录索引,防止列出文件 Options -Indexes # 允许所有人访问display.html <Files "display.html"> Order allow,deny Allow from all </Files> # 限制图片仅能从display.html加载 <FilesMatch "\.(jpg|jpeg|png|gif)$"> Order deny,allow Deny from all # 检查Referer是否来自当前域名下的display.html Allow from env=REDIRECT_REFERER_DISPLAY </FilesMatch> # 设置环境变量,匹配来自display.html的Referer SetEnvIf Referer "^https?://[^/]+/display\.html$" REDIRECT_REFERER_DISPLAY
说明:
SetEnvIf指令会检查请求的Referer是否是当前域名下的display.html页面(支持http和https),符合条件则设置环境变量REDIRECT_REFERER_DISPLAY。- 在图片的匹配规则里,允许带有这个环境变量的请求,也就是从
display.html发起的图片加载请求。 - 直接访问图片URL时,Referer为空或不符合规则,会被拒绝返回403。
注意:少数用户可能会禁用浏览器的Referer发送,但这是目前最简便且通用的实现方式。
内容的提问来源于stack exchange,提问作者k3513662
相关产品推荐
相关产品推荐

