Некоторые интересные нюансы (в примерах) условной установки/удаления переменных, разрешения/запрещения доступа в зависимости от этого.
Установка/удаление переменных
Установка переменной в зависимости от user-agent
SetEnvIfNoCase User-Agent google AllowGroup
Переменная AllowGroup будет установлена (значение "1"), если User-Agent
содержит "google", независимо от регистра.
Кавычки необязательны, если
последовательность символов ("google") не содержит пробелов.
Установка переменной в зависимости от гео данных
(если на сервере установлено расширение GeoIP)
Примеры зависимости от континента, страны, региона, города :)
SetEnvIfNoCase GEOIP_CONTINENT_CODE "EU" AllowGroup
SetEnvIfNoCase GEOIP_COUNTRY_CODE "RU" AllowGroup
SetEnvIfNoCase GEOIP_REGION_NAME "Kyyiv" DisallowGroup # Kyyivs'ka Oblast
SetEnvIfNoCase GEOIP_CITY "Kyiv" DisallowGroup # Kyyiv
Удаление переменной (своего рода unset)
SetEnvIfNoCase User-Agent unwanted_bot !AllowGroup
Переменная AllowGroup будет очищена, если User-Agent содержит "unwanted_bot",
независимо от регистра.
Ставится восклицательный знак перед именем
переменной, которую надо удалить. Если быть более точным, можно сказать, что
переменная не удаляется, а ей устанавливается значение "" (пустая строка)
вместо "1". Это стоит учитывать при проверках, установлена или нет такая
переменная.
Одновременно несколько переменных
Можно устанавливать одновременно несколько переменных. Или очищать. Или одни устанавливать, другие - очищать.
SetEnvIfNoCase Remote_Addr 127.0.0.1 DisallowGroup !AllowGroup
В данном примере для посетителя с IP адресом 127.0.0.1 будет установлена переменная DisallowGroup и очищена переменная AllowGroup.
Установка переменной в зависимости от IP адреса
SetEnvIfNoCase Remote_Addr 18.27.197.252 DisallowGroup
Для посетителя с указанным IP адресом (адрес вымышлен, случайные цифры) будет установлена переменная DisallowGroup.
Или по части IP адреса (сразу подсеть):
SetEnvIfNoCase Remote_Addr ^18.27.197. DisallowGroup
SetEnvIfNoCase Remote_Addr ^18.27.[12] DisallowGroup
Установка переменной в зависимости от Cookie
SetEnvIfNoCase Cookie "exAcs=a" AllowGroup
Если строка с куками содержит указанную последовательность символов (то есть кука exAcs равняется "a"), будет установлена переменная AllowGroup.
Установка переменной в зависимости от реферера
(сайта, с которого перешли на наш сайт)
SetEnvIfNoCase ^Referer$ (yandex.|google.|mail.ru|bing.com) AllowGroup
В данном примере для посетителей, которые перешли с указанных поисковиков, для этой загрузки этой страницы будет установлена переменная AllowGroup.
Очистить (удалить) переменную в зависимости от другой переменной
Переменные можно устанавливать/очищать в зависимости от других
переменных.
SetEnvIfNoCase AllowGroup ^$ !MK_74
В данном примере: если переменная AllowGroup пустая (не установлена), тогда очистить переменную MK_74.
Проверка переменных для перенаправления
Проверка для редиректа, если переменная установлена
RewriteCond %{ENV:AllowGroup} 1
RewriteRule ...
Проверка для редиректа, если переменная не установлена
RewriteCond %{ENV:AllowGroup}^$
RewriteRule ...
По сути, это проверка на пустое значение.
Использование переменных в ограничении доступа
Запретить всем, кроме разрешенных
Order Deny,Allow
Deny from all
Allow from env=AllowGroup
Доступ будет разрешен только посетителям, кому выше присвоена переменная AllowGroup.
Разрешить всем, но некоторым запретить
Order Allow,Deny
Allow from all
Deny from env=!AllowGroup env=DisallowGroup
Запрещаем доступ тем, у кого AllowGroup не установлена или DisallowGroup
установлена.
Комбинированный вариант
Order Allow,Deny
Allow from env=AllowGroup
Deny from env=!AllowGroup env=DisallowGroup
Как видите, возможности - очень даже ничего! )
Не забудьте отписаться в
комментариях, если нашли тут для себя что-то полезное или интересное!
Кстати, о полезном:
Комментариев нет:
Отправить комментарий