Техническая поддержка

Управление веб-сервером Apache с помощью механизма .htaccess

Для пользователей виртуального хостинга доступен механизм управления web-сервером Apache - .htaccess. Механизм .htaccess работает на уровне каталога и его подкаталогов и позволяет ограничивать доступ к каталогу с помощью htpasswd, определять собственные страницы ошибок, настраивать перенаправления, изменять некоторые параметры интерпретатора PHP и многое другое.

DirectoryIndex - переопределение файла по умолчанию

Если при обращении к сайту в URL не указан файл, по умолчанию web-сервер будет возвращать индексный файл, например index.html. Данное поведение можно изменить директивой DirectoryIndex:

DirectoryIndex 123.php3 /cgi-bin/index.pl

Теперь при обращении к каталогу будет открываться файл 123.php3 или cgi-bin/index.pl.

При обращении к каталогу Apache попытается найти один из указанных файлов и показать посетителю его содержимое, а если сделать этого не получится, сервер выдаст пользователю список файлов в каталоге. Запретить выдачу листинга каталога можно директивой:

Options -Indexes

ErrorDocument - обработка ошибок

При каждом обращении к web-серверу он возвращает код состояния из трех цифр, в зависимости от результата выполнения запроса. Например, код 404, в просторечии ошибка 404, сообщает, что сервер не нашел запрошенный ресурс, код 500 означает внутреннюю ошибку сервера и т.д. По умолчанию выдается стандартное сообщение сервера с кодом состояния, которое можно переопределить директивой ErrorDocument, указывающей серверу, какой файл выдать на соответствующий код состояния.

Пример:

ErrorDocument 404 /missing.html

При возникновении ошибки 404 сервер вернет файл missing.html вместо стандартного сообщение об ошибке. Это полезно с точки зрения выдачи пользователям более информативных сообщений при обработке определенных ситуаций: запроса несуществующего ресурса, требования авторизации web-сервером, ограничения доступа к странице, некорректных ссылок в запросе и т.д.

Полный список кодов состояния доступен по ссылке Коды состояний HTTP.

AddType - переопределение кодировок

Если страница отображается в некорректной кодировке, ее можно изменить в .htaccess. Для статических страниц (html) можно добавить строку:

AddCharset utf-8 .htm .html

где utf-8 - нужная кодировка.

Для PHP-скриптов можно добавить:

php_value default_charset "cp1251"

где cp1251 - нужная кодировка.

В самих PHP-скриптах можно добавить такую строку (в начале):

header("Content-Type: text/html; charset=utf-8");

Auth* - защита паролем

Механизм .htaccess можно использовать для установки пароля на доступ к определенным страницам или разделам Вашего сайта. Делается это путем создания в нужном подкаталоге файла .htaccess следующего содержания:

AuthType Basic 
AuthName "this is a test of protected realm" 
AuthUserFile путь_к_файлу_паролей 
require valid-user

Теперь нужно создать файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile, если он еще не создан. Файл паролей создается утилитой htpasswd в Unix-shell на сервере хостинга:

htpasswd -c passwords test1
New password: 
Re-type new password: 
Adding password for user test1

Данная команда создаст файл паролей passwords с пользователем test1:

cat passwords 
test1:$apr1$Nxjyt55B$FgzqcO.v1ggG7RyLkMDz3/

Теперь для доступа к каталогу, где расположен наш файл .htaccess, нужно будет ввести логин test1 и пароль для него.

Order, Allow, Deny - ограничение доступа для пользователей

С помощью директив .htaccess можно запретить доступ к сайту с одного или нескольких IP-адресов:

Order Allow,Deny
Deny from 195.1.1.1
Allow from All

Данная конструкция запрещает доступ к сайту с IP-адреса 195.1.1.1. Если вместо 195.1.1.1 написать 195.1.1, то доступ будет запрещен для всей сети класса C 195.1.1.0/24.

В некоторых случаях при ограничении доступа бывает полезна директива Limit. Она определяет список методов, к которым применяется данное ограничение. Например, <Limit GET> означает, что данное ограничение доступа относится только к методу GET, но не влияет, например, на метод POST. Если в предыдущем примере мы напишем:

<Limit GET>
Order Allow,Deny
Deny from 195.1.1.1
Allow from All
</Limit>

Перенаправления

С помощью .htaccess можно настраивать перенаправления ссылок на сайте. Например, следующая конструкция будет перенаправлять запросы с domain_name на www.domain_name:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain_name$
RewriteRule ^(.*)$ http://www.domain_name/$1 [R=301]

Если добавить к ней строки:

RewriteCond %{HTTP_HOST} sub.domain_name$
RewriteRule ^(.*)$ http://www.domain_name/$1 [NC,R=301,L]

то при открытии sub.domain_name пользователь будет попадать на http://www.domain_name.

Для перенаправления запросов с сайта http://domain_name на https://domain_name добавьте в .htaccess следующие строки:

RewriteEngine On
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Теперь запросы к domain_name будут идти по шифрованному протоколу HTTPS, при условии, что на сайте установлен сертификат SSL.

Полезные ссылки