Файл .htaccess — настройка перенаправлений и управление конфигурацией веб-сервера

.htaccess — это конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.

На хостинге RU-CENTER в настоящее время используется веб-сервер Apache версии 2.4.

Директивы файла .htaccess действуют для каталога, в котором размещён такой файл, а также для всех его подкаталогов. Если вы желаете с помощью .htaccess изменить настройки для сайта в целом, его следует размещать в корневом каталоге сайта ~/ваш_домен/docs.

Пожалуйста, будьте внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» из Windows, а специальные текстовые редакторы. Например, Notepad++.

Примеры использования файла .htaccess

1. Ограничение доступа к сайту по IP

Запретить доступ к сайту с IP-адресов 123.4.5.6 и 123.5.4.6:

Order Allow,Deny
Allow from all
Deny from 123.4.5.6 123.5.4.3

Запретить доступ к сайту со всех IP-адресов, кроме 123.4.5.6 и 123.5.4.6:

Order Allow,Deny
Deny from all
Allow from 123.4.5.6 123.5.4.3

Запретить доступ к сайту для всех:

Deny from all

2. Переопределение главной страницы сайта (индексного файла каталога)

Сделать главной страницей файл menu.html:

DirectoryIndex menu.html

3. Включение обработки PHP в .html-файлах

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

4. Включить выполнение CGI-скриптов в папке docs для файлов с расширениями .cgi, .pl, .py

В папке с CGI-скриптами необходимо разместить файл .htaccess с содержимым:

AddHandler cgi-script .cgi .pl .py
Options +ExecCGI

Скрипт должен иметь атрибут исполнения (+x, права доступа, начинающиеся с 7; к примеру, 755). Атрибуты (права доступа) можно изменить с помощью файлового менеджера панели управления, FTP-клиента или по SSH. Также в разделе «Веб-сервер» → «Управление модулями» должен быть включён модуль CGI.

5. Блокировка переходов со сторонних ресурсов

Для запрета перехода с 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]

6. Особенности использования кириллических доменов (.рф, .москва и др.)

В файле .htaccess использование кириллицы не допускается. При составлении правил перенаправления для кириллических доменов необходимо указывать имя домена в punycode. Узнать имя домена в punycode можно с помощью сервиса Whois.

Например, для перенаправления с site.ru на сайт.рф нужно воспользоваться следующим правилом:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.site.ru [NC]
RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1 [R=301,L]

В этом случае ваши посетители могут увидеть домен именно в представлении punycode в адресной строке браузера. Это не является ошибкой.


Настройка перенаправлений

Кириллические домены (в зоне .рф, .рус и др.) необходимо прописывать в формате punycode.

1. Перенаправление доменов с синонима сайта на основной домен с кодом 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.

2. Постоянное перенаправление с кодом 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]

3. Постраничное перенаправление запросов на другой домен с кодом 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]

4. Перенаправление с одной страницы на другую с кодом 301

Добавьте в .htaccess следующие строки:

RRewriteEngine On
RewriteCond %{HTTP_HOST} site.ru/old-page
RewriteRule (.*) http://site.ru/new-page$1 [R=301,L]

где:

  • site.ru/old-page - адрес прежней страницы;
  • new_page.html - адрес новой страницы.

5. Перенаправление для отдельного IP с кодом 301

Добавьте в .htaccess следующие строки:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} 123.123.123.123
RewriteRule ^(.*)$ http://site.ru [R=301,L]

где:

  • 123.123.123.123 - IP-адрес, для которого нужно настроить редирект;
  • site.ru - домен вашего сайта.

6. Перенаправление с кодом 301 с главной страницы за исключением остальных страниц сайта

В файл .htaccess, находящийся в папке сайта, с которого необходимо выполнить переадресацию, добавьте следующие строки:

RewriteEngine On
RewriteRule ^$ https://site.ru [R=301,L]

7. Перенаправление с кодом 301 со всех страниц сайта за исключением главной

В файл .htaccess, находящийся в папке сайта, с которого необходимо выполнить переадресацию, добавьте следующие строки:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

8. Перенаправление с массовой склейкой

Если вам необходимо сделать перенаправление на index.php с помощью .htaccess, введите:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]]

где site.ru - домен вашего сайта.

9. Перенаправление с http:// на https:// и обратно

Для работы перенаправления на сайте должен быть установлен действующий SSL-сертификат.

Перенаправить запросы на https://domain.ru:

RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Перенаправить запросы на http://domain.ru:

RewriteEngine on
RewriteCond %{ENV:HTTPS} on
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Диагностика ошибок

Если после редактирования или размещения .htaccess при обращении к сайту вы получили ошибку 500, то, скорее всего, в файле .htaccess допущена ошибка, проверить это достаточно легко, переименовав ваш файл .htaccess, например, на имя .htaccess_old и после этого проверить работу сайта повторно. Если сайт работает то причина именно в некорректной настройке файла .htaccess.

Посмотреть  причины возникновения ошибки вы можете в лог-файле /var/log/ваш_домен.error_log.


Дополнительная документация и примеры

С подробной документацией вы можете ознакомиться на сайте разработчика веб-сервера Apache: http://httpd.apache.org/docs/2.4/rewrite/

Всё ещё остались вопросы?