Назад | Перейти на главную страницу

Использование '\' перед DOT в доменных именах в коде .htaccess

Многие веб-сайты предоставляют код .htaccess для блокировки спам-ботов, спам-рефералов и т. Д.

Некоторые веб-сайты используют "\" перед "." в доменных именах. Например:

RewriteCond %{HTTP_REFERER} spamdomain\.com [NC,OR]

SetEnvIfNoCase Referer spamdomain\.com spambot=yes

Но некоторые веб-сайты используют прямое доменное имя. Например:

RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]

SetEnvIfNoCase Referer spamdomain.com spambot=yes

Теперь я не понимаю, какой синтаксис кода правильный? Оба кода работают нормально? Какой мне использовать?

Потому что второй аргумент как RewriteCond и SetEnvIfNoCase директивы регулярные выражения (регулярное выражение), а не обычные строки. Regex использует специальный синтаксис для определения шаблоны поиска. В синтаксисе регулярных выражений точка / период - это специальный (мета) символ, который представляет любой персонаж (кроме новых строк по умолчанию). Чтобы сопоставить буквальную точку (т. Е. Отключить ее особое значение), вам нужно экранировать точку с помощью обратной косой черты (т. Е. Поставить обратную косую черту перед точкой).

Итак, регулярное выражение лайк spamdomain\.com соответствует буквальной строке spamdomain.com везде в проверяемой строке. (В первом примере соответствует spamdomain.com везде в HTTP_REFERER серверная переменная.) В то время как регулярное выражение вроде spamdomain.com (где точка не экранирована) будет соответствовать spamdomainAcom, spamdomainBcomи т. д. Потому что точка соответствует любому символу.

RewriteCond %{HTTP_REFERER} spamdomain.com [NC,OR]

Строго говоря, это неверно. Регулярное выражение соответствует большему, чем предполагалось. Однако на самом деле это может не быть проблемой, если буквальная точка - единственный символ, который может появиться в этой позиции. (Но в этом случае точка должна быть экранирована.)

Ссылка: