Старый синтаксис 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.