#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, и ничего больше. К сожалению, с директивой atindex2.php
у меня все еще нет доступа.4. Итак, что происходит, когда вы полностью удаляете директиву? Без индексного файла большинство серверов всегда будут выдавать вам сообщение 403 Запрещено