Конфигурирование сайта с помощью файла .htaccess

Файл . htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами файлов . htaccess во вложенных каталогах). Изменения, вносимые в файлы . htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd. conf. Для того, чтобы файлы . htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd. conf, где должны быть прописаны директивы, которые разрешат файлу . htaccess переопределять конфигурацию Web-сервера в каталоге. Список этих директив задаётся директивой AllowOverride. Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None Для того чтобы дать директивам файлов . htaccess максимальные права на изменения директив, значение директивы AllowOverride в файле httpd. conf должно быть равно All. Оно является значением по умолчанию. AllowOverride All Запретить переопределение любых директив в конфигурационных файлах . htaccess можно при помощи значения None: AllowOverride None Замечание
Название конфигурационного файла можно изменить, и например, назвать его не . htaccess, a access. conf. За название этого файла отвечает директива AccessFileName в файле httpd. conf. Изменение названия конфигурационного файла . htaccess не рекомендуется, т. к. это может усложнить дальнейшую поддержку сервера. Синтаксис . htaccess Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах . htaccess. Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/ При указании абсолютных url обязательно должны быть зааданы протоколы, например:
Redirect / В файлах . htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т. к. это приводит к генерации кода ответа 500 - ошибка конфигурации сервера: "Internal Server Error". Примеры использования . htaccess Индексные страницы: Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index. php, а в основном конфигурационном файле httpd. conf она не прописана. Эту задачу можно решить при помощи файла . htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц: DirectoryIndex index. php index. shtml index. html При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index. php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index. shtml и т. д. до конца списка, пока не будет найдена и открыта соответствующая страница. Запрет на отображение содержимого каталога при отсутствии индексного файла Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл. Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений. Options –Indexes Обработка кодов ответов Web-сервера Apache Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц - обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument ErrorDocument 401 /401. html
ErrorDocument 403 /403. html
ErrorDocument 404 /404. html
ErrorDocument 500 /500. html После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа. 401 ошибка — Запрос требует аутентификации пользователя (Unautorized). 403 ошибка — Доступ к запрашиваемому ресурсу запрещён (Forbidden). 404 ошибка — Запрашиваемый документ на сервере отсутствует (Not Found). 500 ошибка — Ошибка конфигурации сервера или внешней программы (Internal Server Error). Выполнять код PHP в файлах HTML Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html. RemoveHandler . html . htm
AddType application/x-httpd-php . php . htm . html . phtml Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP Задание кодировки файлов на сервере Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку. AddDefaultCharset Windows-1251 Задание кодировки загружаемых файлов При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл. CharsetSourceEnc windows-1251 Отключение директивы MultiViews Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом, и если посетители обратятся к несуществующему каталогу, то включённая опция MultiViews вместо этого каталога подставит файл down. php. Однако подстановка будет выполнена не полностью - пути к изображениям, таблицам стилей и т. п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить. Options -MultiViews Запрет доступа к файлам Для того чтобы посетители не могли получить доступ к служебным файлам из окна браузера, можно запретить доступ к таким файлам. Для этого используется директива запрета Deny и разрешения доступа Allow. Примечание
Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера. Запрет доступа к файлам из браузера Deny from all При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога. Запрет доступа к определенному файлу
Deny from all
Здесь запрещен доступ только к файлам с именем config. php. Запрет доступа к файлам расширения inc
Deny from all
* - любая последовательность символов, исключая символ слеша (/). Запретить доступа к файлам с несколькими типами расширений
Deny from all
Запрещен доступ к файлам с расширением inc, conf и cfg Запретить доступ с определенного IP-адреса Deny from 195. 135. 232. 70 Разрешить доступ только с определенного IP-адреса Order deny,allow
Deny from all
Allow from 195. 135. 232. 70 Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа(директива Deny), а затем разрешается доступ то для IP-адреса 195. 135. 232. 70 (директива Allow). Если в первой строке поменять порядок следования директив на Order allow,deny, то доступ для IP-адреса 195. 135. 232. 70 не будет открыть, т. к. директива Deny, выполняемая последней, перекроет действие директивы Allow. Примечание
Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга. Перенаправление на другой адрес Часто встречаются задачи, когда все запросы к определённому каталогу или странице нужно перенаправить (redirect) на другой адрес. Это можно сделать с помощью директив Redirect и RedirectMatch. Они сообщают, что ресурс по запрошенному url отсутствует, и указывают адрес, по которому следует перейти. Директивы Redirect посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление. Глобальное перенаправление на новый адрес Redirect / Перенаправление при обращении к определённому файлу Redirect /books/index. php Перенаправление при обращении к любым страницам каталога RedirectMatch /books/. * Перенаправление при обращении к любым страницам сайта RedirectMatch /. * ===================================================
Дмитрий Кравченко - руководитель проекта "Азбука интернета"
( автор ряда статей по раскрутке сайта.
=================================================== *Републикация cтатьи возможна при сохранении исходного текста и подписи в конце статьи.
Отзывы и комментарии