.htaccess файлове - същност и възможности
cloxy трудност:
видян:
1955
.htaccess файловете дават възможност за промяна на конфигурацията на сървъра на ниво директории. Това за разпределени конфигурционни файлове съдържащи сървърни конфигурационни директиви, които се прилагат за текущата директория, в която е поставен htaccess файла както и за всички нейни поддиректории.
Основните неща, които трябва да се знаят за htaccess файловете са следните:
- По подразбиране тези файлове са с име .htaccess, но разбира се това може да бъде променено.
- Представляват обикновени текстови файлове, като за Windows потребителите може да е объркващо, че тези файлове нямат име, а само разширение .htaccess . Ето защо Windows не позволява създаването на такива файлове, но не забранява ползването им т.е можете да създадете тези файлове на обикновен Linux сървър и да си ги копирате на Windows машина ако желаете да ги използвате там.
- Като текстови файлове, те съдържат набор от текст със специален синтаксис, в който се описват директиви, конфигурации, правила и др. ,с които се извършва конфигурацията на директорията
- .htaccess файловете се поставят в съответната директория, за която съдържат конфигурационни директиви
- Директивите описани в тези файлове важат за всички поддиректории на директорията, в която се намира .htaccess файла.
- Поддиректориите могат да съдържат други .htaccess файлове, с други директиви, като се пренебрегват директивите описани в .htaccess файла на родителската директория.
.htaccess файловете се използват най-често, когато няма директен досъп до конфигурационния файл на Apache сървъра – тези файлове се поддръжат само от Apache сървъри. Обикновено влизат в употреба най-често за следните насоки:
Пренаписване на URL адрес
- пренаписване на URL адреса – това е възможност на Apache сървъра да пренаписва URL адреса, като по този начин конвертира сложния и дълъг адрес в удобен и лесен за запомняне адрес, особено полезно за оптимизация спрямо търсачките в интернет. Пренаписването става на базата на регулярни изрази и определени алгоритми, които ще бъдат описани по-надолу в статията. Използва се най-често с цел
SEO оптимизация.
Защита на директория с потребителско име и парола:
- Създаване на ограничен контрол на достъпа до файловете в директорията – това е възможност, при която може да се ограничи достъпа до сървъра чрез парол и потребителко име на ниво директория.
Пример:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache/passwd/passwords
Require user myuser pass
Забрана на достъпа до опрeделени типове файлове – това е практика, при която може да се защити определен файл от директен достъп
Примерна реализация за забрана на директен достъп до файл:
Пример:
<Files ~ "(.(inc|pl|sh|sql|theme|engine|xtmpl)|updates)$">
Order deny,allow
Deny from all
</Files>
Където <Files> - е конфигурационната директива директива на htaccess файла
Чрез тези директиви се забранява достъпа до файлове с раширение .inc, .pl, .sh, .sql, .theme, .engine , .xtml и т.н
Указване на файл, който да се извика в случай на грешка
Пример
ErrorDocument 404 /index.php
Горния пример ще укаже да се извика файл index.php, когато съръвъра не може да открие заявения файл. Това е удобен начин за контрол на грешките над сървъра и е показател за качеството на приложението.
Контрол на сървърния език – PHP - htaccess файловете дават възможност за контрол на конфигурацията на сървърния език. Това е особено полезно, когато сме на разпределен сървърен ресурс и нямаме директен достъп до конфигурационния файл на езика
Пример:
<IfModule mod_php4.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
</IfModule>
<IfModule sapi_apache2.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
</IfModule>
Статията ще бъде допълнена с още примери за употреба на htaccess файловете, но сега нека разгледаме по-подробно възможността за пренаписване на URL адреса.
Това е една от най-мощните функционалности на Apache сървъра и по-специално на един модул към него наречен – mod_rewrite
Mod_rewrite използва двигател базиран на правила зададени от потребителя и по-специално набор от регулярни изрази за контрол нa URL. Манупулациите върху адреса зависят от набор от определени тестове на състояния и сървърни променливи. Модула има огромен брой възможности, разбира се в компенсация на тези големи възможности идва сложността на модула.
Основното, което трябва да се разбере е същността на обработата на HTTP заявките от сървъра.
Обрабортката се извършва на фази. Сървъра е снабден с т.нар „куки”(hooks) за прихващане на всяка фаза. Mod_rewrite модула използва 2 от тези куки:
- кука за транслация на URL към име на файл – тази кука се вика веднага след приемане на HTTP заявката, но преди да е извъшена ауторизация.
- Фиксираща кука, която се вика веднага след ауторизация и след прочитането на htaccess файла, но преди да се активира обработващия механизъм за съдържание
След инициализирането на mod_rewrite модула в тези две фази следва обработка на групи от правила зададени в конфигурационните файлове.
Основни и най-често използвани конфигурационни директиви на .htaccess файловете
RewriteEngine
Това е директива, която пуска или изключва пренаписващия модул в реално време. Синтаксиса и е следния:
RewriteEngine on – пренаписването е включено
RewriteEngine off – пренаписването в изключено
Ако се наложи да изключите пренаписването, е добре да се ползва тази директива вместо да се коментират правила от конфигурационния файл.
RewriteBase
Това е директива указаща базовия URL път за директорията текущата директория. Синтаксиса е следния:
RewriteBase /mysite
Горната директива ще укаже, че базовият URL адрес е адреса на сървъра + /mysite .
RewriteCond
Това е директива, която указва при какво условие може да се извика пренаписащ процес.
Синтаксиса е следния:
RewriteCond <тестов низ> <условие>
където <тестов низ> може да бъде произволен желан низ или някоя от следните сървърни променливи:
HTTP хедъри:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
Идентификатори на връзката:
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
Вътрешни сървърни променливи:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
Системни променливи:
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
Специални променливи:
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
<условие> може да бъде някой от следните ключове:
-d - третира <тестовия низ> като директория и проверява дали съществува и дали е валидна директория
-f - третира <тестовия низ> като файл и проверява дали съществува и дали е валиден файл.
-s - проверява дали големината на файла е валидна
-l - третира текстовия низ като линк и проверява дали съществува
-U - третира тестовия стринг като URL и проверява дали съществува
Всеки от тези ключове може да работи и с отрицание като се използва символа "!" пред всеки ключ.
пример за употребата на тази директива:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
След прочитане на горните правила mod_rewrite ще пренапише всичко, което е непосредствено след домейна, не е файл или директория, на следното URL index.php?q="всичко след домейна"