如何使用 htaccess 拒绝对文件夹的直接访问

Posted

技术标签:

【中文标题】如何使用 htaccess 拒绝对文件夹的直接访问【英文标题】:How to deny direct access to a folder using htaccess 【发布时间】:2016-03-12 05:07:07 【问题描述】:

我的网站都是关于图像的。所以我想找到一种方法来防止使用(我猜).htaccess 直接访问图像文件夹。 根据我的阅读,一种方法是将图像文件夹移出网络根目录,然后使用以下代码添加一个 .htaccess 文件:

deny from all

所以这是我的问题:

如果我不将文件夹移到 web-root 之外会有什么问题吗?因为我将不得不对所有页面中的代码进行大量更改。将图像文件夹移到网络根目录之外的逻辑是什么?

还有其他安全的方法吗?我担心如果添加 .htaccess 会拒绝访问所有图像,那么我将无法共享我的页面并使用其中的图像。

更新:

如果我使用以下代码来防止我的图像被盗链接但允许它到特定网站会怎样。

RewriteEngine on
RewriteCond %HTTP_REFERER !^$
RewriteCond %HTTP_REFERER !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteCond %HTTP_REFERER !^http(s)?://(www\.)?yordomain2.com [NC]
RewriteCond %HTTP_REFERER !^http(s)?://(www\.)?yordomain3.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://page-to-redirect [NC,R,L]

【问题讨论】:

【参考方案1】:

如果您将图像文件夹移到 Web 根目录之外,则不需要 .htaccess。无法从外部访问您的 Web 根目录之外的目录。

所以你可以两者都做,但不能一起做。 无论如何,只要无法访问您的图像,就无法在您的网站上使用它们。要在您的网站上显示图片,它必须是“可加载的”。

希望对您有所帮助。

【讨论】:

谢谢,感谢您的意见。所以这意味着无论我选择哪个我都不能否认我的图像,因为它们不会“可加载”?是这个意思吗? 是的,没错。从技术上讲,在您的页面上显示图片与下载该图片相同。【参考方案2】:

你可以添加到.htaccess

Options -Indexes

防止查看图像文件夹内容。

另一种将索引文件放入图像文件夹的方法。

如果您在页面上发布某些图片,则无法限制下载。

【讨论】:

使用 html5,您可以将图像绘制到画布上,这会使普通用户很难下载您的图像。 我同意,但是 printscreen 可以抓住一切,而且现在很流行,尤其是对于平板电脑用户。种植也不是什么难事。我认为水印仍然是更好的保护。 正是我想要的!谢谢!【参考方案3】:

1) 使用 .htaccess 将所有对图像文件夹的请求重定向到 index.php 脚本:

# Turn rewriting on
Options +FollowSymLinks
RewriteEngine On
# Redirect requests to index.php
RewriteCond %REQUEST_URI !=/index.php
RewriteCond %REQUEST_URI !.*\.png$ [NC]
RewriteCond %REQUEST_URI !.*\.jpg$ [NC]
RewriteCond %REQUEST_URI !.*\.gif$ [NC]
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

2) 在您的 index.php 中执行一些逻辑来确定是否应该提供图像。

// Do some checking...
$safe = true; // determine if the image should be served
if($safe)
    header("content-type: image/png"); // or gif or jpg
    readfile($_GET['q']);

【讨论】:

你能检查我更新的问题吗:) 感谢你的意见。【参考方案4】:

我用它来解决同样的问题:

Options -Indexes
RewriteEngine On
# Only from this website
RewriteCond %HTTP_REFERER !^$
RewriteCond %HTTP_REFERER !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpe?g|gif|png|bmp)$ - [NC,F]

# To prevent access to crawlers
RewriteCond %HTTP_USER_AGENT (?:google|tineye) [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [NC,F]

它并没有真正阻止对图像的访问,而是从其他网站页面访问。

【讨论】:

以上是关于如何使用 htaccess 拒绝对文件夹的直接访问的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 拒绝目录访问

.htaccess 拒绝访问图像文件夹,但允许访问查看单个图像

使用 .htaccess 拒绝访问目录中的所有 PHP 文件

拒绝访问 .htaccess 中的一个特定文件夹

使用 htaccess 拒绝访问除少数文件夹外的所有文件夹

拒绝直接访问 sitemap.xml(仅允许搜索机器人)