LINUX.ORG.RU

Apache + RewriteMap

 ,


0

1

Задача: Пропускать на сайт пользователей, если они пришли с определенных сайтов!

Затестил вариант:

RewriteCond %{HTTP_REFERER} "!google" [NC]
Если пришли не с гугла - выдаем 403. Все работает! Решил воспользоваться заманчивой директивой RewriteMap

Создал файл, указал там список сайтов в виде:

google.com -
example.com - 

Прописал в конфиге:

<IfModule mod_rewrite.c>
	RewriteEngine On
        RewriteMap allowreferer "txt:/home/allow_referer.txt"
	RewriteCond "%{HTTP_REFERER}" !=""
        RewriteCond "${allowreferer:%{HTTP_REFERER}|NOT-FOUND}" "=NOT-FOUND"
        RewriteRule ^ - [F,L]
    </IfModule>

И вижу, что нифига не работает! Если прописать в файл allow_referer.txt точные совпадения - то все работает как и ожидалось. А если просто домен - выдает 403! Как быть? Неужели про регулярки забыли в параметре MapName ?

Сча сделал так:

RewriteCond %{HTTP_REFERER} "(http|https):\/\/([a-z0-9\-\.]+)\.([a-z]{2,4}+)(|\/)(.*)"
RewriteCond "${allowreferer:%2.%3|NOT-FOUND}" "=NOT-FOUND"

Вроде работает, но не очень нравится такой вариант! Вернее сказать совсем не нравится!

На борту:

Server version: Apache/2.4.27 (Unix)
Server built:   Jul 25 2017 12:29:36

Прошу помощи!

P.S. Про nginx знаю. Пожалуйста, не ссылайтесь с репликой перехода туда!