【问题标题】:(htaccess) How to make a file only accessable by host Server and prevent direct access?(htaccess) 如何使文件只能由主机服务器访问并防止直接访问?
【发布时间】:2012-05-01 09:49:39
【问题描述】:

我正在使用 Apache,假设“images/sample.jpg”中有一个文件。

  • 使用 .htaccess,我怎样才能使其出现在网站上,然后阻止通过 url 直接访问(例如,像“http://www.abc.com/images/sample.jpg”这样的直接网址)?

  • 如果可能,我还希望解决方案影响“.htaccess”文件下的所有子文件夹。


补充说明:
在得到以下答案的一天后,我发现所有解决方案在逻辑上都有效,但 Firefox 存在问题。我的意思是,下面的答案是在每个浏览器上进行测试时给出的解决方案,而不是在 Firefox 上。

【问题讨论】:

  • 您尝试过使用@pyrate anwer 吗?
  • @anubhava 请看我在他下面的评论。
  • 你的 RewriteCond 应该是:RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]

标签: php apache .htaccess mod-rewrite hotlinking


【解决方案1】:

这被称为“盗链”——我建议先阅读它,因为它不仅仅是一行或 .htaccess 中的代码。这个页面不错:http://altlab.com/htaccess_tutorial.html

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://i.imgur.com/qX4w7.gif [L]

这将显示来自 imgur 的图像,但我有时喜欢更进一步并托管来自我自己的主机的替代图像 - 例如,如果它是竞争对手,你可以有很多乐趣 ;)

【讨论】:

  • 拜托,我对“imgur”不是很清楚。它是关于什么的?我需要使用那条线吗?
  • 这就是我发布该网站链接的原因(尽管可以通过 Google 找到许多其他链接)。这只是一个例子——imgur 只是一个图像托管网站。您可以将任何 URL 放在那里,甚至是您自己的图片 - 但您需要有一个不同的规则来停止“递归”。
  • 我正在我的“localhost/example”网络文件夹上进行测试,但它并没有像我想要的那样工作。我的意思是,我网站上的所有图片都显示“imgur 警告图片”。
  • 正如我所说,代码只是一个示例……但是您是否将 mysite.com 更改为您自己的 URL?
  • 我正在使用RewriteCond %{HTTP_REFERER} !^http://(.+\.)?localhost\test/ [NC]。然后在我的网站上,所有图像都只显示“imgur image”。不是他们应有的形象。我只想在直接 url 调用图像时阻止。但允许出现在网站上。
【解决方案2】:

与 .htaccess 规则相比,防止图像盗链的措施还有很多。但是,您希望在 htaccess 中防止图像盗链的基础是:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$      [NC]
RewriteRule .*\.(jpg|jpeg|png|bmp)$ - [F,NC]

Apache ReWrite guide

【讨论】:

【解决方案3】:

不完全确定,但这应该可以指导您:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteRule (images/sample.jpg)$ - [R=404,L]

【讨论】:

【解决方案4】:

使用这段代码来防止盗链:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

这可以帮助你:http://www.selfseo.com/story-18469.php

【讨论】:

  • @4lvin 试试这个:RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/.*$ [NC] 你在 localhost 之后使用反斜杠。
  • @4lvin 我在上面的代码中更改了一些内容,并在我的本地主机上进行了测试:现在它可以工作了。我错过了第二行。
  • 请跳到我的下一个帖子,解释更清楚stackoverflow.com/questions/10236717/…
  • 所有解决方案(包括这个)都可以正常工作,但是 Firefox 有问题。
【解决方案5】:

根据您的 cmets 看起来这是您需要的:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

我已经在我的本地主机上对其进行了测试,它似乎工作正常。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2016-03-22
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多