Как запретить доступ к файлу в .htaccess
У меня есть следующий файл .htaccess:
RewriteEngine On
RewriteBase /
# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>
# Disable directory browsing
Options All -Indexes
Я пытаюсь запретить посетителям доступ к следующему файлу:
domain.com/inscription/log.txt
но то, что у меня выше, не работает: я все равно могу получить доступ к файлу из браузера удаленно.
Ответы
Ответ 1
В файле htaccess область действия директивы <Files>
применима только к этому каталогу (я полагаю, чтобы избежать путаницы, когда правила/директивы в htaccess подкаталогов получают от суперпоследовательных от родителя).
Итак, вы можете иметь:
<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>
В файле htaccess в вашем каталоге inscription
. Или вы можете использовать mod_rewrite для сортировки дескриптора. Оба случая запрещают доступ к файлу htaccess, а также log.txt:
RewriteRule /?\.htaccess$ - [F,L]
RewriteRule ^/?inscription/log\.txt$ - [F,L]
Ответ 2
Сильное соответствие шаблонов. Это метод, который я использую здесь, в скоропортящемся прессе. Используя сильное сопоставление шаблонов, этот метод предотвращает внешний доступ к любому файлу, содержащему ".htastrong > ", ".HTA" или любую их комбинацию без учета регистра. Чтобы проиллюстрировать это, этот код предотвратит доступ через любой из следующих запросов:
- .htaccess
- .htaccess
- .htaccess
- testFILE.htaccess
- filename.HTACCESS
- FILEROOT.hTaCcEsS
.. и т.д. и т.д. Очевидно, что этот метод очень эффективен для защиты ваших файлов HTAccess сайтов. Кроме того, этот метод также включает в себя укрепляющую директиву Удовлетворить все. Обратите внимание, что этот код должен быть помещен в ваш корневой файл HTAccess ваших доменов:
# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>
Ответ 3
Я не верю, что принятый в настоящее время ответ правильный. Например, у меня есть следующий .htaccess
файл в корне виртуального сервера (apache 2.4):
<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>
Это предотвращает внешний доступ к reminder.php
, который находится в подкаталоге.
У меня есть похожий файл .htaccess
на моем сервере Apache 2.2 с тем же эффектом:
<Files "reminder.php">
Order Deny,Allow
Deny from all
Allow from localhost
Allow from 127.0.0.1
Allow from xxx.yyy.zzz.aaa
</Files>
Я не знаю точно, но я подозреваю, что это попытка определить подкаталог именно в файле .htaccess
, а именно <Files ./inscription/log.txt>
, который вызывает его. Было бы проще разместить файл .htaccess
в том же каталоге, что и log.txt
i.e в каталоге inscription
, и он будет работать там.
Ответ 4
Поместите нижнюю строку в файл .htaccess и замените имя файла как хотите
RewriteRule ^(test\.php) - [F,L,NC]
Ответ 5
Ну, вы можете использовать тег <Directory>
например:
<Directory /inscription>
<Files log.txt>
Order allow,deny
Deny from all
</Files>
</Directory>
Не используйте ./
, потому что, если вы просто используете /
, он смотрит на корневую директорию вашего сайта.
Для более подробного примера посетите http://httpd.apache.org/docs/2.2/sections.html