Управление на достъпа до директория с .htaccess

Файлът .htaccess е почти задължителен и присъства в директорията на всеки сайт. В много CMS сайтове го има дори и в поддиректориите им. Но какво представлява и за какво се използва? Кое го прави задължителен?

.htaccess се използва основно за няколко неща:

  • Управление на достъпа до директория;
  • Различни типове пренасочвания;
  • Оптимизация;
  • Сигурност;
  • Управление на PHP версията на сайта.

Разбира се, .htaccess има и други най-различни приложения, но ние ще разгледаме най-важните и практични за нас.

Няколко ключови неща за .htaccess

Преди да започнем, е добре да кажем няколко ключови неща за .htaccess.

Винаги ли трябва името му да започва с точка? Да, това не е правописна грешка. За да бъде разпознат от уеб сървъра, файлът трябва задължително да е с име .htaccess. Точката обозначава скрит файл при Unix/Linux операционни системи. Името е съкращение от hypertext access и на практика определя правилата за достъп до директорията, в която се намира, както и за съдържанието ѝ.

Това ни води до второто много важно нещо: .htaccess работи рекурсивно, т.е. освен за директорията, в която се намира, той действа и за всички нейни поддиректории. Поддиректориите могат да имат свой .htaccess и така ще се спазват собствените правила, вместо наследените отгоре.

Уеб сървърът чете и изпълнява инструкциите в .htaccess винаги отгоре надолу. Правилата, поставени в началото, винаги се изпълняват първи, а следващите чак след тях.

(Това е причината да не работи дадено пренасочване, когато е поставено в дъното на файла, след пренаписващите правила на WordPress.)

Всяка синтактична грешка в този файл води до незабавна грешка 500 на сайта. Горещо препоръчвам след всяка редакция на .htaccess да прегледате сайта и няколко страници от него, за да се уверите, че не сте допуснали привидно безобидна грешка.

Важно е да отбележа, че всички описани примери са за Apache уеб сървър и ще работят и за LiteSpeed. При Nginx или IIS (Windows Server) правилата и примерите не са приложими.

И можем да започнем с най‑лесното:

Управление на достъпа до директория

Индекс файл

По подразбиране уеб сървърът винаги опитва да намери индекс файл, който да сервира. При Apache файлът, който се зарежда с приоритет, е index.html, а след него – index.php. Това означава, че ако имаме index.html в директорията на сайта, той ще се зареди преди index.php и няма да видите Вашия WordPress сайт, а съдържанието на index.html.

Индекс файлът може да се зададе много лесно с .htaccess и директивата DirectoryIndex, например:

DirectoryIndex home.html

По този начин ще направим индекс файла по подразбиране home.html. Можем дори да подредим няколко файла – първият ще бъде с приоритет:

DirectoryIndex home.html home.htm home.php index.php

Ако първият липсва, Apache ще сервира втория, ако е наличен. Ако не е, продължава към третия, четвъртия и т.н., според това, колко сте задали.

Страници за грешки

Освен индексните страници можем да управляваме и страниците за грешки с ErrorDocument:

ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

И така да си направим страници за грешки, съответстващи на дизайна и настроението на сайта, вместо сървърните по подразбиране. Най-вероятно всички сме виждали доста остроумни 404 грешки.

Coming Soon страница

Тук ще включа и полезен трик за Coming Soon страница (например), докато разработвате сайта Ви. Нужно е предварително да изработите Вашата Coming Soon HTML страница като home.html. След което с .htaccess ще инструктираме всички посетители, освен Вас, да бъдат пренасочвани и да виждат само тази страница:

# Активира mod_rewrite
RewriteEngine On

# Проверяваме IP адреса на посетителя; тук вписвате Ваш IP адрес или адреси
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111$

# Проверяваме дали вече не сме пренасочени към home.html, за да избегнем redirect loop
RewriteCond %{REQUEST_URI} !^/home\.html$

# Пренасочваме посетителя към статичната страница, ако не е от разрешените IP адреси.
RewriteRule ^.*$ /home.html [R=302,L]

Тези правила трябва да бъдат поставени в началото на .htaccess файла, за да работят преди пренаписващите правила на системата на сайта.

Забрана за листване на съдържанието по директориите

Много важна директива, която според мен, трябва винаги да присъства в .htaccess файла на всеки сайт е:

Options -Indexes

Тя забранява на уеб сървъра да показва съдържанието на директорията и указва да зарежда единствено индексния файл от нея. Това е важно, защото не бихте искали съдържанието на директориите от сайта просто да се листва при изписване на /scripts, например. Поради рекурсивното действие на .htaccess е достатъчно тази директива да присъства само веднъж в главната директория на сайта и така ще предпази всички нейни поддиректории.

При нужда можете да разрешите листването на директория с:

Options +Indexes

има и опция с нещо като браузър на файлове:

Options +FancyIndexing

Това обаче не е препоръчително от съображения за сигурност.


.htaccess е инструмент, който позволява да се контролира достъпа, да се управляват пренасочвания, да се подобри сигурността и дори да се настройва версията на PHP за целия сайт. Благодарение на рекурсивното си действие един правилно конфигуриран файл в основната директория защитава и настройва всички поддиректории – от там нататък можете да добавяте специализирани правила само там, където са нужни.

Най‑важните практики, които трябва винаги да се спазват, са:

  1. Записвайте правилата в правилната последователност – най‑горните правила се изпълняват първи. Затова Вашите пренаписващи правила, трябва да са разположени над тези на WordPress например.
  2. Избягвайте синтактични грешки – дори една малка грешка в .htaccess води до грешка 500 и прави сайта недостъпен. Винаги проверявайте сайта след всяка промяна.
  3. Забранявайте листинга на директориите (Options -Indexes) – това е базовата защита, която спира публичното разглеждане на файловете във Вашите папки.

Абонирайте се за СуперБлога, за да получавате полезно и експертно познание от света на уеб хостинг услугите, касаещо Вашия сайт и дигитално присъствие.

Димитър Милушев
Димитър Милушев
Митко е мениджър “Техническа поддръжка” и част от екипа повече от 15 години. Той отговаря за това нашите клиенти да получават бързо и коректно обслужване на техните технически казуси. Винаги дава 100% от себе си в това, което върши.
0 0 votes
.
Абониране
Уведоми ме при
guest

1 Коментар
Inline Feedbacks
View all comments
3 стъпки за органично бизнес онлайн присъствие

3 стъпки за органично бизнес онлайн присъствие [Аудио]

2
Под „органично присъствие“ имаме предвид всички начини, чрез които потребителите могат да разберат за Вашия бизнес, без да плащате за позициониране (реклама).

Имам онлайн магазин, но нямам поръчки. Защо? [Аудио]

0
Изграждането на работещ онлайн магазин изисква време, постоянство и много работа! Ако вече имате магазин, но нямате продажби, вижте възможните причини.
Искам сайт, но не знам откъде да започна

Искам сайт, но не знам откъде да започна [Аудио]

2
Решихме да Ви споделим накратко стъпките, които трябва да извървите, за да изградите своето онлайн присъствие.