RewriteCond %{HTTP_REFERER} !.DOMAIN.COM.* [OR]
Сложность возникает из-за того, что серверные переменные вида %{HTTP_HOST}
не раскрываются в CondPattern (2-й аргумент директивы RewriteCond
), посколькуявляется PCRE (регулярное выражение).
Вместо строки выше, вы можете сделать что-то вроде этого:
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^(.*?)@@https?://\1/ [OR]
Это проверяет, что запрошенный Host
заголовок соответствует имя хоста часть заголовка HTTP Referer
.
Обратная ссылка \1
(в Referer) совпадает с хостом.Строка @@
- это просто любая уникальная строка, которая иначе не может возникнуть.
Обратите внимание, что законные пользователи могут вообще не отправлять заголовок HTTP Referer
, и в этом случае ваш текущий набор правил также будет fail .
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Обратите внимание, что строка замены *1034* в вашем RewriteRule
искажена.Это «обычная» строка, а не регулярное выражение.Следовательно, якоря ^
и $
будут рассматриваться как буквенные символы и должны быть удалены:
RewriteRule .* http://%{REMOTE_ADDR}/ [R=301,L]