Попробуй это.
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.
(но опять же необязательно); за которым следует \1
совпадающее содержимое первой скобки (внутри этого регулярного выражения, а не условия перезаписи), то есть то же самое до #
.
Таким образом, stealer.com
не соответствует регулярному выражению, а yourdomain.com
проходит. Но поскольку мы отменили правило с помощью !
; stealer.com
соответствует условию и, следовательно, применяется правило блокировки горячих ссылок.
person
Ravi K Thapliyal
schedule
03.07.2013