При очередном обновлении WordPress пришлось также сменить версию сервера Apache. И «неожиданно» многое перестало работать, в частности директивы доступа к хостингу.
Оказывается при переходе на веб-сервер Apache2.4 с Apache2.2 необходимо внести ряд исправлений в файл .htaccess, т.к. разрешающие и запрещающие директивы в новой конфигурации Apache используют другой синтаксис. Правила order, deny, allow, сто лет как прописанные в .htaccess больше не работают.
Запретить или разрешить всё:
Apache 2.2 | Apache 2.4 |
Order deny,allow
Deny from all |
Require all denied |
Order allow,deny
Allow from all |
Require all granted |
Запретить или разрешить всё с опред. хоста или ip-адреса:
Apache 2.2 | Apache 2.4 |
Order Allow,Deny
Allow from all Deny from example.com |
<RequireAll>
Require all granted Require not host example.com </RequireAll> |
Order Allow,Deny
Allow from all Deny from 111.111.111.111 |
<RequireAll>
Require all granted Require not ip 111.111.111.111 </RequireAll> |
Можно объединять директивы по хосту или ip-адресу в один блок, например:
Require not ip 192.168.205
Require not host phishers.example.com moreidiots.example
Require not host gov
Запретить или разрешить доступ к опред. файлу с ip-адреса:
Apache 2.2 | Apache 2.4 |
<Files ПУТЬ_К_ФАЙЛУ>
Order Allow,Deny Allow from all Deny from 111.111.111.111 </Files> |
<Files ПУТЬ_К_ФАЙЛУ>
<RequireAll> Require all granted Require not ip 111.111.111.111 </RequireAll> </Files> |
<Files ПУТЬ_К_ФАЙЛУ>
Order Deny,Allow Deny from all Allow from 111.111.111.111 </Files> |
<Files ИМЯ_ФАЙЛА>
Require ip 77.222.44.126 Require ip 123.123.123.123 </Files> |
Блокировка ботов:
Apache 2.2 | Apache 2.4 |
SetEnvIfNoCase User-Agent «AESOP_com_SpiderMan» bad_bot
SetEnvIfNoCase User-Agent «AhrefsBot» bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot |
<If «%{HTTP_USER_AGENT} =~ m#BadBot#i»>
Require all denied </If> Или Require expr %{HTTP_USER_AGENT} != ‘BadBot’ |
Запрет доступа на основе произвольных критериев:
RewriteEngine On
RewriteCond «%{TIME_HOUR}» «>=20» [OR]
RewriteCond «%{TIME_HOUR}» «<07»
RewriteRule «^/dayonly» «-» [F]
Это правило запрещает доступ с 8 вечера до 7 утра к разделу dayonly.
NB Если доменное имя вашего сайта кириллическое, то указывать имя в .htaccess нужно в кодировке Punycode!
p.s. Не пинайте гуманитария, как понял, так и рассказал.