Проверить значение GET с помощью htaccess?

Мне нужна помощь с настройкой правила внутри htaccess, которое делает следующее,

Всякий раз, когда запрошенный URL содержит ключевое слово love затем перенаправьте пользователя на другой URL или покажите страницу 404.

Уточнение немного больше: если кто-то пытается получить доступ к этому URL -> www.domain.com/love или же www.domain.com/?love или любой URL, содержащий слово "love", должен быть перенаправлен на страницу 404.

2 ответа

Решение

Вам нужно иметь дело с сопоставлением чего-либо в пути и сопоставлением чего-либо в строке запроса отдельно, поскольку Apache не предоставляет переменную, содержащую оба. Первый RewriteRule здесь соответствует "love" в пути, а второе правило, ограниченное RewriteCond, соответствует "love" в строке запроса.

RewriteRule .*love.* - [R=404]

RewriteCond %{QUERY_STRING} .*love.*
RewriteRule .* - [R=404]

Всякий раз, когда запрашиваемый URL содержит ключевое слово "любовь"

Если вы хотите исключить слова, содержащие эти буквы, как вложенное слово. например. "перчатка", "неряшливый", "гвоздика" и т. д. тогда вам нужно включить границы слов в регулярное выражение, например. \blove\b.

Вы также можете сделать это с помощью одного правила, проверив THE_REQUEST переменная сервера, содержащая как URL-путь, так и строку запроса.

Например:

RewriteEngine On

RewriteCond %{THE_REQUEST} \blove\b
RewriteRule ^ - [R=404]
RewriteRule ^(.+?)www.domain.com.*\.love/.*$ - [R=404]
Другие вопросы по тегам