Как запретить доступ к файлу в .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

Сильное соответствие шаблонов. Это метод, который я использую здесь, в скоропортящемся прессе. Используя сильное сопоставление шаблонов, этот метод предотвращает внешний доступ к любому файлу, содержащему ".hta​​strong > ", ".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