Запретить доступ к одной конкретной папке в .htaccess

131

Я пытаюсь запретить пользователям доступ к site/includesпапке, манипулируя URL-адресом.

Я не знаю, нужно ли мне все отрицать и вручную делать отдельные исключения, чтобы разрешить, могу ли я просто запретить эту единственную папку или есть ли функция перезаписи, которую можно использовать.

Конкретный пример: я не хочу видеть файлы каталога, вводя localhost/site/includesURL-адрес.

Snoob Dogg
источник
1
просто чтобы запретить перечисление каталогов, пишите Options -Indexesв файл .htaccess, расположенный в корневой папке

Ответы:

206

Создайте site/includes/.htaccessфайл и добавьте эту строку:

Deny from all
анубхава
источник
5
Привет!! anubhava Я использовал это, чтобы отключить прямой доступ к моим файлам api внутри папки / api, но теперь все вызовы веб-сервисов отправляют 403 запрещенный статус. Я просто хочу заблокировать доступ, когда кто-то обращается к нему из браузера.
ravisoni
9
Для веб-сервера нет реальной разницы между запросами между браузером и не браузером.
anubhava
Я использую nginx и не могу его использовать .htaccess. Итак, как я могу обойтись без этого .htaccess? спасибо
Шафизаде
Как я могу получить доступ к файлам папки / подпапки, если я отказываю всем? Файлы в папке / подпапке дают ошибку 404.
Викас Хунтера,
2
Deny from allне выдаст 404, а 403. Вы все еще можете получить доступ к файлам / папкам с помощью PHP / Perl и т.д., но не с помощью веб-запроса. Вы можете открыть новый вопрос, если он не ответил на ваш запрос.
анубхава
52

Вы также можете запретить доступ к папке, используя RedirectMatch

Добавьте следующую строку в htaccess

RedirectMatch 403 ^/folder/?$

Это вернет 403 forbiddenошибку для папки, то есть: http://example.com/folder/но он действительно блокирует доступ к файлам и папкам внутри этой папки, если вы хотите заблокировать все внутри папки, просто измените шаблон регулярного выражения на ^/folder/.*$.

Другой вариант: mod-rewrite Если url-rewrting-moduleвключен, вы можете использовать что-то вроде следующего в root/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

Это внутренне сопоставит запрос страницы folderс forbiddenошибкой.

Амит Верма
источник
1
В Apache 2.22 лучшее решение - первое: RedirectMatch .....
Джон,
6
.htaccessЯ предпочитаю этот ответ, а не создавать несколько файлов в каждом каталоге, для которого мне нужно запретить доступ.
DanMad
40

В .htaccessфайле вам нужно использовать

Deny from  all

Поместите это, site/includes/.htaccessчтобы сделать его специфичным дляincludes каталога

Если вы просто хотите запретить список файлов каталогов, вы можете использовать

Options -Indexes 
Энди
источник
2
Это рекурсивно?
Абдилла
@Abdillah Да, это так
Оливер М. Греч
18

Мы сделаем каталог очень безопасным, запрещающим доступ для всех типов файлов. Ниже приведен код, который вы хотите вставить в файл .htaccess.

Order Allow,Deny 
Deny from all 

Поскольку мы установили безопасность, теперь мы хотим разрешить доступ к желаемым типам файлов. Для этого добавьте приведенный ниже код в файл .htaccess под только что вставленным кодом безопасности.

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

ваш окончательный .htaccessфайл будет выглядеть как

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Источник из Разрешить доступ к определенным типам файлов в защищенном каталоге

arthankamal
источник
Этот ответ избавил меня от головной боли. Работает как шарм.
Я очень стараюсь, но плачу еще сильнее
9

Вы можете создать файл .htaccess для папки, доступ которой должен был быть запрещен с помощью

Deny from  all

или вы можете перенаправить на пользовательскую страницу 404

Redirect /includes/ 404.html
Marvin
источник
6

Просто поместите .htaccess в папку, которую вы хотите ограничить

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

Источник: источники MantisBT .

Крестный отец
источник
4

Вы также можете поместить это IndexIgnore * в свой корневой файл .htaccess, чтобы отключить список файлов для всех каталогов вашего веб-сайта, включая подкаталог.

ravisoni
источник
6
Это не отключает список файлов, но указывает автоиндексатору игнорировать все файлы при построении индекса. Чтобы отключить список файлов, вы должны использовать Options -Indexes.
Владимир Корнеа
3

Создание index.php, index.html, index.htm небезопасно. Кстати, любой может получить доступ к вашим файлам в указанном каталоге, угадав имена файлов. Например: http://yoursite.com/includes/file.dat Итак, рекомендуется создать файл .htaccess, чтобы запретить всем посетителям;). Радоваться, веселиться !!

Meraj
источник
2

Вы можете сделать это динамически таким образом:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);
RatajS
источник
0

По некоторым причинам, которые я не понял, создание папки / .htaccess и добавление Deny from All у меня не сработали. Я не знаю почему, это казалось простым, но не сработало, вместо этого сработало добавление RedirectMatch 403 ^ / folder /.*$ в корневой htaccess.

Chimdi
источник