Файл .htaccess – настройка перенаправлений и управление конфигурацией веб-сервера
Содержание
- Общая информация
- Примеры использования файла .htaccess
- Диагностика ошибок
- Дополнительная документация и примеры
Общая информация
.htaccess - конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.
Директивы файла .htaccess действуют для каталога, в котором размещён такой файл, и для всех его подкаталогов. Если вы желаете с помощью .htaccess изменить настройки для сайта в целом, его следует размещать в корневом каталоге сайта - ~/ваш_домен/docs
.
Будьте, пожалуйста, внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» Windows, а специальные текстовые редакторы, например Notepad++.
2. Примеры использования файла .htaccess
Перенаправление доменов c синонима сайта на основной домен с кодом 301
Перенаправить запросы на domain.ru
с любого из синонимов сайта
RewriteEngine On RewriteCond %{HTTP_HOST} !^domain\.ru$ [NC] RewriteRule ^(.*)$ http://domain.ru/$1 [L,R=301]
Перенаправить запросы на www.domain.ru
с любого из синонимов сайта
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.domain\.ru$ [NC] RewriteRule ^(.*)$ http://www.domain.ru/$1 [L,R=301]
Данные правила рекомендуется размещать в самом начале файла .htaccess.
Постоянное перенаправление с кодом 301
Если вы изменили адрес страницы сайта, добавьте в .htaccess следующие строки, чтобы запросы со старого адреса переадресовывались на новый
Redirect 301 /page.html http://www.domain.ru/new_page.html
где:
page.html
- адрес старой страницы относительно корня сайта;
www.domain.ru
- имя сайта;
new_page.html
- адрес страницы, на которую нужно выполнить перенаправление.
Обращаем ваше внимание, что подобное правило не сработает для перенаправления с адресов, содержащих Query String
(символы после ?). Для запросов, содержащих QUERY_STRING, можно использовать сочетание RewriteCond и RewriteRule.
Например, для перенаправления всех запросов к странице /period/?test=123
вашего сайта на domain.ru, вы можете написать:
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} ^test=123$ [NC] RewriteRule ^period/$ http://domain.ru/ [L,R=301]
Переопределение страниц ошибок
При помощи файла .htaccess вы можете установить свои страницы ошибок:
#401 Авторизация не выполнена ErrorDocument 401 http://domain.ru/errors/401.html #403 Доступ запрещен ErrorDocument 403 http://domain.ru/errors/403.html #404 Страница не найдена ErrorDocument 404 http://domain.ru/errors/404.html #500 Внутренняя ошибка сервера ErrorDocument 500 http://domain.ru/errors/500.html
Соответствующие файлы страниц ошибок (401.html, 404.html
и др.) необходимо разместить в каталоге ~/ваш_домен/docs/errors
.
Для того чтобы при случайном упоминании прямых ссылок на такие страницы они не проиндексировались в поисковых системах, рекомендуется:
А) в файле ~/ваш_домен/docs/robots.txt
прописать
User-agent: * Disallow: /errors
Б) создать файл ~/ваш_домен/docs/errors/.htaccess
, в котором прописать
Options -Indexes
Постраничное перенаправление запросов на другой домен c кодом 301
Следующий код перенаправит все запросы к страницам вашего сайта на аналогичные страницы другого сайта, например, запрос http://domain.ru/main
будет переадресован на http://www.newdomain.ru/main
:
Redirect 301 / http://www.newdomain.ru/
либо
RewriteEngine On RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]
Ограничение доступа к сайту по IP
Запретить доступ к сайту с IP-адресов 123.4.5.6 и 123.5.4.3
Order Allow,Deny Allow from all Deny from 123.4.5.6 123.5.4.3
Запретить доступ к сайту со всех адресов кроме 123.4.5.6 и 123.5.4.3:
Order Deny,Allow Deny from all Allow from 123.4.5.6 123.5.4.3
Запретить доступ к сайту для всех:
Deny from all
Переопределение главной страницы сайта (индексного файла каталога)
Сделать главной страницей файл menu.html:
DirectoryIndex menu.html
Включение обработки PHP в .html-файлах
RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml
Запрет выдачи листинга каталога
В случае отсутствия в папке главной страницы (индексного файла), при обращении без указания конкретного имени файла в запросе будет выдан список всех файлов, находящихся в каталоге. Для того чтобы запретить отображение листинга каталога, добавьте в файл .htaccess строку:
Options -Indexes
Включить выполнение CGI-скриптов в папке docs для файлов с расширениями .cgi, .pl. .py
В папке c CGI-скриптами необходимо разместить файл .htaccess с содержимым:
AddHandler cgi-script .cgi .pl .py Options +ExecCGI
Скрипт должен иметь атрибут исполнения (+x, права доступа, начинающиеся с 7, например, 755).
Блокировка переходов со сторонних ресурсов
Для запрета перехода c baddomain.ru на domain.ru добавьте в .htaccess следующее:
RewriteEngine on RewriteCond %{HTTP_REFERER} baddomain\.ru [NC] RewriteRule .* - [F]
Если требуется запретить переходы с нескольких доменов, то используйте следующие директивы
RewriteEngine on RewriteCond %{HTTP_REFERER} baddomain\.ru [NC,OR] RewriteCond %{HTTP_REFERER} baddomain2\.ru [NC,OR] RewriteCond %{HTTP_REFERER} baddomain3\.ru [NC] RewriteRule .* - [F]
Включение передачи заголовка Last-Modified для файлов .htm .html
По умолчанию на хостинге файлы .html .htm обрабатываются как SSI, поэтому для них не передается заголовок Last-Modified. Для включения в файл .htaccess необходимо добавить строку:
RemoveHandler .html. .htm
При этом файлы .html .htm уже не будут обрабатываться как SSI.
Особенности использования кириллических доменов (.РФ, .МОСКВА и др.)
В файле .htaccess использование кириллицы не допускается. При составлении правил перенаправления для кириллических доменов необходимо указывать имя домена в punycode.
Например, для перенаправления domain.ru на caйт.рф нужно воспользоваться следующим правилом:
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.site.ru [NC] RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai /$1 [R=301,L]
3. Диагностика ошибок
Если после редактирования или размещения .htaccess при обращении к сайту вы получили ошибку 500, то, скорее всего, в файле .htaccess допущена ошибка. Посмотреть её причины вы можете в файле ~/ваш_домен/logs/error_log
.
Если указанные вами в файле .htaccess правила не выполняются, необходимо убедиться, что обработка файла .htaccess включена в настройках вашего сайта.
4. Дополнительная документация и примеры
С подробной документацией вы можете ознакомиться на сайте разработчика веб-сервера Apache:
- http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
- http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect