【问题标题】:htaccess doesn't allow my domainhtaccess 不允许我的域
【发布时间】:2016-05-17 10:02:06
【问题描述】:

我创建了一个 htaccess 文件并将它放在 public_html 目录(我的服务器的根目录):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://mdpcomics.ir/.*$ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ https://blogvault.net/wp-content/uploads/2014/12/no-hotlinking.png [NC,R,L]
</ifModule>

它会阻止盗链并显示另一个图像。但它也不允许我自己的域。

即此链接不应显示图像: http://dl.mdpcomics.ir/logo.png

但是这个链接应该显示它。我的意思是我希望它通过使用此链接显示图像: http://mdpcomics.ir/?imagename=logo

但它也不允许这样做。

我已经到处搜索并尝试了很多建议,但所有建议都如下:

  1. 每个人都可以看到图像
  2. 没有人能看到包括我自己在内的图像 O.o

我的服务器操作系统是 linux,我的面板是 directadmin

编辑: 我意识到我的主机有一个虚假或无效的 ip:178.63.56.20320 我通过php代码得到了那个ip:

echo $_SERVER['REMOTE_ADDR'];

【问题讨论】:

    标签: .htaccess directadmin


    【解决方案1】:

    也许这是您的问题:在您的RewriteRule 中显示https://,但您的RewriteCond 正在测试http://。您只需添加s?即可对其进行测试:

    RewriteCond %{HTTP_REFERER} !^https?://mdpcomics.ir/.*$ [NC]
    

    需要注意的其他事项:

    • 如果请求来自 HTTPS 位置,客户端将不会在非 HTTPS 请求中发送 Referer
    • 一些客户从不发送 Referer 标头或将其设置为完全不同的内容以保护他们的隐私

    为了捕捉这些情况,我会添加另一个条件:

    # Assume client sent "real" Referer if it begins with http(s)://
    RewriteCond %{HTTP_REFERER} ^https?:// [NC]
    

    缺点是,如果您的网站运行正常的 HTTP,图像可能会从外部 HTTPS 位置热链接。

    【讨论】:

    • 感谢您的回答,但不,也没有帮助,RewriteCond %{HTTP_REFERER} ^https?:// [NC] 使热链接可供所有人使用,而第一个仍然没有不允许我查看属于我自己域的图片,
    • @MDP 很奇怪,不知道REMOTE_ADDR为什么这么乱码。您的请求是否甚至包含Referer 标头?通过从一个文件 test.html:&lt;a href="test.php"&gt;test&lt;/a&gt; 链接到另一个文件 test.php:&lt;?php echo $_SERVER['HTTP_REFERER'] ?&gt; 进行测试
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2017-07-03
    • 2021-04-04
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多