我有一个名为display.html
的文件,我想用它来显示图像。但是,我不想让其他人通过在URL中键入图像的名称来直接访问图像。因此,我使用.htaccess
来拒绝访问,但不知何故它也拒绝了display.html
。我有下面的.htaccess
代码:
# Prevent direct access to images
Options -Indexes
# Allow display.html to access images
<Files "display.html">
Order allow,deny
Allow from all
</Files>
# Allow access to images for display.html only
<FilesMatch "\.(jpg|jpeg|png|gif)$">
Order deny,allow
Deny from all
<Files "display.html">
Order allow,deny
Allow from all
</Files>
</FilesMatch>
在这段代码中,它不应该允许display.html
访问所有其他的jpg和jpeg文件吗?但它显示403错误时,试图加载图像。我如何修改.htaccess文件,使其工作?感谢您的任何帮助。
1条答案
按热度按时间7xzttuei1#
我有一个名为
display.html
的文件,我想用它来显示图像。假设在这个HTML文件中,您只是使用
img
元素嵌入图像?在这种情况下,您不能简单地在.htaccess
中阻止这些图像,这会阻止对这些图像的所有HTTP请求。问题不在于
display.html
本身被阻止,而在于嵌入在display.html
中的图像被阻止。您唯一的选择是在请求这些图像时检查
Referer
(一个“r”)HTTP请求头。Referer
* 应该******包含请求图像的URL。例如,在
.htaccess
中使用mod_rewrite:上面的代码会阻止(403 Forbidden)任何对指定的镜像扩展名的请求,其中HTTP
Referer
头是 nothttps://www.example.com/display.html
。这基本上是一种“防盗链”形式。*****但是,这并不一定可靠。
Referer
头是由用户/浏览器发送的。可能用户已经抑制了Referer
头的发送(出于“安全”考虑),因此不会为这些用户显示图像。因此,Referer
头也可以伪造(因此,如果这是一个问题,仍然可以从外部源下载图像)。这允许访问
display.html
本身。但这不是问题所在。display.html
已经可以访问了。问题是您阻止了对图像的所有访问,而不管它们是从“from”访问的。“from”是“referrer”(由Referer
HTTP请求头表示)。