Управление веб-сервером 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 Deny,Allow 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.