Старый синтаксис Order / Deny / Allow использовался в Apache 2.2. На современных серверах с Apache 2.4 он считается устаревшим и может работать не так, как вы ожидаете. Рекомендуемый вариант сейчас строится на директиве Require.
Есть и вторая частая причина: если сайт находится за nginx, Cloudflare или другим прокси, Apache может видеть IP прокси, а не реальный IP посетителя. В таком случае правило по IP посетителя не сработает, пока сервер не настроен на корректную передачу реального IP.
Разрешить доступ только с одного IP
Используйте этот вариант, если нужно закрыть каталог или сайт для всех, кроме вашего IP-адреса:
Require ip 203.0.113.10
Чтобы разрешить несколько IP-адресов:
Require ip 203.0.113.10
Require ip 198.51.100.25
Запретить доступ с одного IP
Чтобы заблокировать конкретный IP и разрешить доступ всем остальным:
<RequireAll>
Require all granted
Require not ip 203.0.113.10
</RequireAll>
Закрыть доступ для всех
Чтобы полностью закрыть каталог:
Require all denied
Разрешить доступ для всех
Чтобы явно разрешить доступ:
Require all granted
Если используется Cloudflare или другой прокси
Если сайт работает через прокси, Apache может получать запросы от сети прокси. В этом случае Require ip проверяет IP, который видит Apache, а не всегда реальный IP посетителя. Для надежного ограничения доступа убедитесь, что реальный IP клиента корректно передается на сервер, или настройте ограничение на уровне прокси, например в правилах Cloudflare.
Если правило вызывает 500 или 403
- Проверьте error log домена в DirectAdmin.
- Не смешивайте старый синтаксис Order/Deny/Allow с новыми правилами Require в одном блоке.
- Проверьте, что правило находится в нужной директории.
- Если вы скопировали правило с другого сервера, уточните, что там использовалось: Apache 2.2, Apache 2.4, nginx или Cloudflare.
