我需要为我的.htaccess文件编写一个反热链接命令,但是它不能是特定于任何域名的。到目前为止,我在另一个网站上发现了什么,但我不清楚为什么它不起作用,有人能发现问题吗?
# 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]发布于 2013-07-03 17:38:10
尝尝这个。
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 )所以,现在重写条件实际上试图匹配
yourdomain.com#stealer.com OR yourdomain.com#www.stealer.com对于^(.+)#(www\.)?\1$,这意味着(.+)#在#之前的任何事情和一切,然后是www. (但同样是可选的);后面是第一个括号的匹配内容(在这个正则表达式中;不是重写条件),也就是#之前的完全相同的内容。
因此,stealer.com会失败,而yourdomain.com则会通过。但是,由于我们用!否定了规则;stealer.com传递条件,因此应用了热链接停止规则。
https://stackoverflow.com/questions/17454319
复制相似问题