.htaccess в примерах
Автор: Голышев С.В. (softtime.ru)
В этой статье обсуждается — что такое .htaccess, зачем он
нужен, и как его можно использовать.
.htaccess (с точкой в начале имени) – это файл, который
дает возможность конфигурировать работу сервера в отдельных директориях
(папках), не предоставляя доступа к главному конфигурационному файлу.
Например, устанавливать права доступа к файлам в директории, менять
названия индексных файлов, самостоятельно обрабатывать ошибки Apache,
перенаправляя посетителей на специальные страницы ошибок.
Как известно, конфигурационные директивы сервера Apache
находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права
доступа к этому файлу. Например, если Вы используете для хостинга
виртуальный сервер, когда один сервер Apache обслуживает множество сайтов,
то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не
менее, вы можете конфигурировать работу сервера в своих директориях. И
делать вы это можете с помощью файлов .htaccess.
Файл .htaccess может быть размещен в любом каталоге.
Директивы этого файла действует на все файлы в текущем каталоге и во всех
его подкаталогах (если эти директивы не переопределены директивами
нижележащих файлов .htaccess).
Изменения, вносимые в файлы .htaccess, вступают в силу
немедленно и не требуют перезагрузки сервера, в отличие от изменений,
вносимых в главный конфигурационный файл httpd.conf.
Настройки httpd.conf, разрешающие применение файлов
.htaccess
Для того, что бы эти файлы .htaccess можно было
использовать — необходимы соответствующие настройки главного
конфигурационного файла. В файле httpd.conf должны быть прописаны
директивы, которые разрешат файлу .htaccess переопределять конфигурацию
web-сервера в каталоге. Эта директива называется AllowOverride. Она может
быть установлена как для всего сервера (глобально), так и для отдельного
каталога.
Директива AllowOverride может включать в себя одну из
следующих директив или их комбинацию: All, None, AuthConfig,
FileInfo, Indexes, Limit, Options
.
Для того чтобы дать директивам файлов .htaccess
максимальные права следует прописать в httpd.conf:
AllowOverride All
Примечание
При желании название конфигурационного файла можно
изменить, и например, назвать его не .htaccess, a access.conf. За название
этого файла отвечает директива AccessFileName в файле httpd.conf. Но все
же рекомендуется этого не делать.
Синтаксис .htaccess
Перед тем, как будут рассмотрены примеры, остановимся на
синтаксисе директив в файлах .htaccess.
- Пути к файлам и директориям должны указываться от корня сервера,
например, /pub/home/server1/html/
Если вы не знаете путь от корня сервера, то Вы можете его
узнать, спросив у администратора сервера, либо можете посмотреть сами,
запустив на сайте функцию PHP — phpinfo(). Она выведет на экран
конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти
переменную doc_root и посмотреть ее значение — это будет путь от корня
сервера до Вашей основной директории.
- В именах доменов обязательно должны быть указаны протоколы,
например:
Redirect /
http://www.newsite.ru
Примеры использования .htaccess
Глобальное перенаправление (редирект) на другой
адрес:
Redirect /
http://www.newsite.ru
Перенаправление (редирект) только при запросе
определенных страниц:
redirect /company
http://www.newsite.com/newcompany
redirect /forum
http://www.newsite.com/newforum
При запросе страниц из каталогов company и forum будет
произведено перенаправление на новые адреса.
Перенаправление (редирект) только посетителей с
определенным IP-адресом:
SetEnvIf REMOTE_ADDR
192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule
^/$ /only_for_you.html
Если посетитель имеет IP-адрес 192.145.121.1, то ему
будет открыта страница only_for_you.html.
Изменение названия индексной страницы:
DirectoryIndex index.html
index.php index.shtml
Можно указать несколько индексных страниц. При запросе
каталога они будут искаться в том порядке, в котором перечислены в
директиве DirectoryIndex. Если не будет найден файл index.html, то будет
произведен поиск файла index.php и т.д.
Выполнять код PHP в файлах HTML
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Добавив эти строки в .htaccess вы дадите директиву
серверу выполнять инструкции PHP не только в файлах с расширением *.php и
*.phtml, но и в файлах с расширением *.htm и *.html.
Обработка ошибок Apache
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
При возникновении этих ошибок посетитель будет
перенаправлен на специально созданные страницы.
- 401 ошибка — Требуется авторизация (Authorization Required).
- 403 ошибка — пользователь не прошел аутентификацию, доступ запрещен
(Forbided).
- 404 ошибка — Документ не найден (Not Found).
- 500 ошибка — Внутренняя ошибка сервера (Internal Server Error).
Запрет на отображение содержимого каталога при
отсутствии индексного файла
Options –Indexes
Определение кодировки, в которой сервер "отдает"
файлы
AddDefaultCharset
windows-1251
Определение кодировки на загружаемые файлы
CharsetSourceEnc
windows-1251
Запрет доступа ко всем файлам
deny from all
Запрещен доступ ко всем файлам и каталогам в текущей
директории.
Разрешить доступ только с определенного
IP-адреса
order deny,allow
deny from
all
allow from 195.135.232.70
Строка order deny,allow определяет, в каком порядке
следует выполнять директивы. Сначала выполняется директива запрета
доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70.
Если в первой строке поменять порядок следования директив на order
allow,deny, то доступ для данного IP-адреса не будет открыть, так как
директива deny, выполняемая последней перекроет действия директивы
allow.
Запретить доступ с определенного IP-адреса
deny from 195.135.232.70
Запретить доступ к определенному файлу
<Files config.php>
deny from all
</Files>
Запрещен доступ посетителей к файлам config.php. Этот
запрет не действует на скрипты web-сервера. Они по прежнему будут иметь
доступ к этому файлу.
Запретить доступ к файлам с определенным
расширением
<Files "*.conf">
deny from all
</Files>
Здесь запрещен доступ к файлам с расширением *.conf.
Директива
, при указании имени файлов, позволяет использовать
подстановочные символы.
? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)
Запретить доступа к файлам с несколькими типа
расширений
<Files ~
"\.(inc|conf|cfg)$">
deny from all
</Files>
Запрещен доступ к файлам с расширением *.inc, *.conf и
*.cfg. Хотя директива
, по умолчанию, не работает с регулярными
выражениями, но их можно включить поставив символ тильды(~) в опциях
директивы. Синтаксис следующий:
[тильда] [пробел]
[далее_все_без_пробелов]
Установка пароля на директорию
AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require
valid-user
</Files>
Установка прав доступа с помощью файлов .htaccess более
подробно рассмотрена рассмотрена статье:
.htaccess и .htpasswd — защита
доступа