Заборонити доступ до однієї конкретної папки в .htaccess


130

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

Я не знаю, чи потрібно мені все заперечувати і вручну робити окремі винятки, щоб дозволити, якщо я можу просто заперечувати цю одну папку, чи є можливість перезаписати функцію, яку можна використовувати.

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


1
просто заборонити лістинг каталогів запишіть Options -Indexesу .htaccess файл, що знаходиться у кореневій папці

Відповіді:


205

Створіть site/includes/.htaccessфайл і додайте цей рядок:

Deny from all

5
Гей !! anubhava Я використовував це для відключення прямого доступу до моїх файлів api всередині / api-папки, але тепер усі виклики веб-сервісу надсилають 403 заборонений статус .. Я просто хочу заблокувати доступ, коли хтось отримує доступ до нього з браузера.
ravisoni

9
Для веб-сервера немає реальної різниці між запитами між браузером і не-браузером.
anubhava

Я використовую nginx, а не можу використовувати .htaccess. так, як я можу це зробити без .htaccess? спасибі
Shafizadeh

Як я можу отримати доступ до файлів папки / підпапки, якщо я заборонив усі? Файли в папці / підпапках створюють 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>

Джерело з Дозволити доступ до певних типів файлів у захищеному каталозі


Ця відповідь врятувала мені сильний головний біль. Працює як шарм.
Я дуже стараюся, але плачу сильніше

9

Ви можете створити .htaccess файл для папки, до якого слід було б заборонити доступ

Deny from  all

або ви можете переспрямувати на користувальницьку сторінку 404

Redirect /includes/ 404.html

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, щоб вимкнути перелік файлів усіх каталогів вашого веб-сайту, включаючи sub-dir


6
Це не вимикає список файлів, але вказує autoindexer ігнорувати всі файли при побудові індексу. Щоб вимкнути список файлів, ви використовуєте Options -Indexes.
Володимир Корнеа

3

Створення index.php, index.html, index.htm не захищено. Оскільки, будь-хто може отримати доступ до ваших файлів у вказаному каталозі, відгадавши ім’я файлів. Наприклад: http://yoursite.com/includes/file.dat Отже, рекомендованим методом є створення файлу .htaccess для відмови у всіх відвідувачів;). Весело !!


2

Це можна зробити динамічно таким чином:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.