首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止使用htaccess和非特定域代码进行热链接。

停止使用htaccess和非特定域代码进行热链接。
EN

Stack Overflow用户
提问于 2013-07-03 17:17:12
回答 1查看 503关注 0票数 2

我需要为我的.htaccess文件编写一个反热链接命令,但是它不能是特定于任何域名的。到目前为止,我在另一个网站上发现了什么,但我不清楚为什么它不起作用,有人能发现问题吗?

代码语言:javascript
复制
# Stop hotlinking.
#------------------------------
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^https?://([^/]+)/ [NC]
# Note the # is just used as a boundary. It could be any character that isn't used in domain-names.
RewriteCond %1#%{HTTP_HOST} !^(.+)#\1$
RewriteRule \.(bmp|gif|jpe?g|png|swf)$ - [F,L,NC]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 17:38:10

尝尝这个。

代码语言:javascript
复制
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?([^/]+)/.*$ [NC]
RewriteCond %2#%{HTTP_HOST} !^(.+)#(www\.)?\1$ [NC]
RewriteRule \.(bmp|gif|jpe?g|png|swf)$ - [F,L,NC]

甚至在只有一个引用者或目标url有一个领先的www.时才能工作。

编辑:(这个%的东西是如何工作的?)

%n引用上次匹配重写条件中n(th)括号的匹配内容。

所以,在这种情况下

  • %1 = www.""空白(因为它是可选的;使用()?进行此操作)
  • %2 = yourdomain.com (不总是www )

所以,现在重写条件实际上试图匹配

代码语言:javascript
复制
yourdomain.com#stealer.com OR yourdomain.com#www.stealer.com

对于^(.+)#(www\.)?\1$,这意味着(.+)##之前的任何事情和一切,然后是www. (但同样是可选的);后面是第一个括号的匹配内容(在这个正则表达式中;不是重写条件),也就是#之前的完全相同的内容。

因此,stealer.com会失败,而yourdomain.com则会通过。但是,由于我们用!否定了规则;stealer.com传递条件,因此应用了热链接停止规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17454319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档