Еще одна очень важная и востребованная возможность реализуема с использованием AddType. Речь идет о явном указании кодировки для, например, HTML-документов. Допустим, все страницы Вашего сервера выполнены в кодировке windows-1251, все хорошо, все работает. Однако, вдруг понадобилось сделать подраздел сервера например на финском языке. Вы создали у себя на компьютере соответствующие страницы, текст которых написан по-фински, загрузили на сервер в специальный каталог (например, http://www.Ваш_сервер.ru/fin) и, казалось бы, все сделано, но буквы национального алфавита показываются браузером неверно.
В таких случаях нужно явно указывать кодировку, в которой выполнены соответствующие страницы. Без этого браузер не поймет как нужно отображать национальные символы, которые находятся в документе. Более того, если для всего сервера выдается кодировка windows-1251, естественно, финские страницы будут выданы браузеру тоже с кодировкой windows-1251 в заголовке, что приведет к стопроцентно неправильному отображению.
Итак, учимся выдавать нужную кодировку. Как уже говорилось, документы на другом языке лежат у нас в подкаталоге /fin. Заходим в него, создаем там файл .htaccess и добавляем туда строчку:
AddType "text/html; charset=iso-8859-1" .html
В результате для всех файлов с расширением .html в каталоге /fin будет выдаваться такой http-заголовок:
> telnet host.ru 80
Connected to host.ru.
HEAD /fin/test.html HTTP/1.1
Host: host.ru
HTTP/1.1 200 OK
Last-Modified: Wed, 18 Jul 2001 16:29:30 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1
Кодировку iso-8859-1 в данном случае мы использовали потому что финский язык это именно iso-8859-1. Это общий набор символов для большинства западноевропейских языков. Узнайте какой charset должен выдаваться для нужного Вам языка и воспользуйтесь AddType.
Auth* - защита паролем
Еще можно использовать .htaccess для установки пароля на доступ к определенным страницам или разделам Вашего сайта. Делается это путем создания в нужном подкаталоге файла .htaccess, в который пишем следующее:
AuthType Basic
AuthName "this is a test of protected realm"
AuthUserFile /path/to/file/with/passwords
require valid-user
Кроме того, нужно создать файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile. Пароли в этом файле должны быть шифрованными, чего можно достигнуть с помощью программы htpasswd, входящей в поставку Apache. Если Вы набрали в unix shell команду htpasswd и система сообщила что такого файла нет, выясните у своего хостинг-провайдера где же находится htpasswd. Однако, допустим, htpasswd у нас доступен:
> htpasswd
Usage:
htpasswd [-cmdps] passwordfile username
htpasswd -b[cmdps] passwordfile username password
-c Create a new file.
Здесь мы не будем рассматривать все параметры этой команды, но Вы можете сами прочитать подробности запустив htpasswd в unix shell или ознакомившись с соответствующей страницей документации по Apache.
Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:
> htpasswd -c passwords test1
New password:
Re-type new password:
Adding password for user test1
>
После выполнения данной операции htpasswd создаст файл passwords, в котором окажется пользователь test1 и его пароль в зашифрованном виде:
> cat passwords
test1:zgco1KREjBY8M
>
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ '-c':
> htpasswd passwords test2
New password:
Re-type new password:
Adding password for user test2
> cat passwords
test1:zgco1KREjBY8M
test2:eN3uA6t0kzV1c
>
Сейчас попробуйте обратиться к тому каталогу, в котором мы размещали .htaccess - браузер спросит у Вас пароль, чего мы и добивались. Пока не будет введен правильный логин и пароль, посетитель не увидит соответствующей страницы.
В качестве параметра к директиве require мы указали valid-user. Это означает, что любой пользователь, который есть в используемом файле с паролями, может иметь доступ к защищенному ресурсу. Однако, согласитесь, удобно иметь все пароли в одном файле, а права на конкретные ресурсы давать только определенным пользователям. Это тоже реализуемо. Например, мы хотим дать доступ только пользователю test2. Делаем так:
require user test2
Еще можно объединить пользователей в группы и давать доступ не конкретным логинам, а группам. Это можно сделать с помощью директивы
AuthGroupFile:
AuthGroupFile /path/to/file/with/groups
В файле /path/to/file/with/groups создаем группы примерно так:
group1: test1 test5
group2: test2 test4
group3: test1 test3
Соответственно, директиву require будем использовать так:
require group group3
Механизмы ограничения доступа, которые реализованы в Apache, позволяют очень гибко управлять правами для пользователей и групп, что является очень важной возможностью. Если углубиться в изучение предмета, Вы сможете узнать и то, что логины и пароли, используемые для авторизации, можно хранить не только в файлах, но и в простейших базах данных формата BerkeleyDB - почитайте документацию по директиве AuthDBGroupFile. Еще для хранения данных авторизации можно использовать практически любую СУБД (MySQL или PostgreSQL, например), но это уже выходит за рамки данной статьи.
Order, Allow, Deny - запрет доступа для определенных посетителей
Признайтесь, ведь наверняка хоть один раз у Вас было желание запретить кому-то заходить на Ваш веб-сервер? И это тоже можно сделать с помощью .htaccess:
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. Подробнее читайте в документации по команде Deny.