заменить имя домена в правиле htaccess на динамическое имя хоста - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть это правило в htaccess:

1 ## Protect from spam bots ##
2 RewriteEngine On
3 RewriteCond %{REQUEST_METHOD} POST
4 RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
5 RewriteCond %{HTTP_REFERER} !.DOMAIN.COM.* [OR]
6 RewriteCond %{HTTP_USER_AGENT} ^$
7 RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

Я хочу заменить DOMAIN.COM в строке 5 на динамическое имя хоста.Я хотел бы использовать то же правило с другим доменом без изменения htaccess.

1 Ответ

0 голосов
/ 07 декабря 2018
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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...