.htaccess блокирует меня из подкаталогов

#php #apache #.htaccess

#php #apache #.htaccess

Вопрос:

У меня есть следующее в .htaccess файле на моем сервере:

 <Files index.php>
Order Deny,Allow
Deny from All
Allow from 80.168.22.149
</Files>
  

.htaccess Находится в подкаталоге по адресуwww.example.com/subdir/.htaccess

index.php Файл находится в том же подкаталоге.

Это выдает обычную ошибку, если я пытаюсь получить доступ к странице с другого IP:

 Forbidden

You do not have permission to access this document.
  

Однако, когда я пытаюсь получить доступ к подкаталогу, такому как /subdir/images , я получаю ту же ошибку. Эта ошибка появляется, если я пытаюсь получить доступ с разрешенного ИЛИ запрещенного IP-адреса. Я думал, что <Files> ограничение будет запрещать доступ только к указанным файлам?

Мне нужно быть единственным IP-адресом, к которому можно получить доступ index.php , но мне нужно иметь возможность ссылаться на подкаталоги внутри /subdir/ и позволять любому просматривать их.

Ответ №1:

Вместо <Files> директивы вы можете использовать это правило перезаписи в /subdir/.htaccess :

 RewriteEngine On
RewriteBase /subdir/

RewriteCond %{REMOTE_HOST} !=80.168.22.149
RewriteRule ^index.php$ - [F,NC]
  

Комментарии:

1. К сожалению, это не устраняет проблему. Подкаталоги /subdir/ по-прежнему недоступны.

2. Вы уверены, что Apache получает 80.168.22.149 IP-адрес? Это правило не может блокировать ничего, кроме /subdir/.htaccess . Есть ли еще правила? Попробуйте в другом браузере.

Ответ №2:

Проблема с вашей <Files> директивой заключается в том, что она соответствует всем, index.php включая index.php файлы в подкаталогах.

Единственный способ обойти это — использовать вместо этого <Location> директиву, но вы не можете использовать это в .htaccess файле.

Вместо этого вам нужно будет отредактировать файл конфигурации Apache и добавить <Location> директиву туда внутри <VirtualHost> директивы для домена

Комментарии:

1. в /subdir/images/ каталоге, к которому я пытаюсь получить доступ, нет index.php файла, так почему этот файл должен быть запрещен? Может ли теоретически каждый подкаталог иметь свой собственный .htaccess разрешающий доступ?

2. Какой файл / files /subdir/images/ есть в нем? Если вы измените директиву на index2.php после этого вы сможете получить доступ к вложенному каталогу?

3. /images/ пока что в нем есть пара файлов PNG, и ничего больше. К сожалению, с директивой at index2.php у меня все еще нет доступа.

4. Итак, что происходит, когда вы полностью удаляете директиву? Без индексного файла большинство серверов всегда будут выдавать вам сообщение 403 Запрещено