Инструкция для веб-мастеров: секреты настройки .htaccess файла

Файл .htaccess — это пользовательский файл для дополнительной настройки web-сервера Apache. Правила в .htaccess применяются для каталога, в котором он создан, и для всех его подкаталогов. Это позволяет добавить правила как и для всего сайта, так и для конкретного каталога. Как можно заметить, имя данного файла начинается с точки, что в unix-системах указывает на то, что файл является скрытым.

Основными преимуществами данной настройки являются:

  • возможность пользователя самому настроить нужные правила web-сервера для сайта, не имея доступа суперпользователя;
  • настройки в данном файле применяются мгновенно, без перезагрузки какой-либо службы;
  • поскольку настройки .htaccess работают только для текущего каталога и его подкаталогов, ошибки в его синтаксисе не влияют на другие сайты и на работу web-сервера в целом.

Из минусов .htaccess можно отметить не самый дружелюбный синтаксис, который для начинающих может быть довольно сложным. Поэтому в данной статье мы рассмотрим основные директивы файла .htaccess и примеры правил с ними, которые сможет использовать любой пользователь без каких-либо знаний в синтаксисе .htaccess.

Редирект с http на https

Для перенаправления всех страниц сайта с http на https достаточно добавить правило в начало файла .htaccess, который расположен в корневой папке сайта.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !robots.txt$
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

Данным правилом мы запретим доступ сайту или директории сайта, где .htaccess расположен с подобными правилами, для всех, кроме IP-адреса 123.123.123.123. По аналогии можно указывать несколько строк с IP-адресами, которым доступ нужно разрешить.

Require all denied
Require ip 123.123.123.123

Данным правилом мы наоборот закрываем доступ для конкретного IP-адреса 123.123.123.123:

Require all granted
Require not ip 123.123.123.123

Ограничение доступа к конкретному файлу, в примере файл cron.php:

<Files "cron.php">
Require all denied
Require ip 123.123.123.123
</Files>

Если вышеуказанных директив нет, то посредством файла .htaccess доступ к сайту не ограничивается.

Редирект 301

Редирект 301 с главной страницы сайта на URL http://your_site.ua можно сделать таким образом. В данном примере и последующих, вместо your_site.ua нужно указать имя вашего сайта или нужный URL.

Redirect 301 / http://your_site.ua

Можно также использовать данное правило для любой директории сайта: для этого вместо / указываем нужную директорию, к примеру, /my_dir.

Redirect 301 /my_dir http://your_site.ua

Следующее правило используется для перенаправления всех страниц домена your_site.ua на соответствующие страницы другого домена your_new_site.ua. Данное правило нужно добавить в .htaccess сайта, со страниц которого должен быть редирект, в примере это your_site.ua:

RewriteCond %{HTTP_HOST} ^www\.your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://your_new_site.ua/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://your_new_site.ua/$1 [L,R=301]

По аналогии с предыдущим правилом можно сделать редирект со всех страниц www.your_site.ua на такие же страницы your_site.ua, то есть это редирект с www на без www:

RewriteCond %{HTTP_HOST} ^www\.your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://your_site.ua/$1 [L,R=301]

И наоборот, с без www на такую же страницу с www:

RewriteCond %{HTTP_HOST} ^your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://www.your_site.ua/$1 [L,R=301]

Это правило поможет избавиться от .html в конце URL страницы:

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R=301]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

Еще можно убрать / в конце URL:

RewriteEngine on
RewriteRule (.+)/$ /$1 [L,R=301]

Или добавить / в конце URL, который не заканчиваются на / :

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Кодировка сайта

В .htaccess также можно принудительно установить кодировку для сайта используя директиву AddDefaultCharset и передавая ей один параметр — желаемую кодировку, к примеру:

AddDefaultCharset UTF-8

или

AddDefaultCharset WINDOWS-1251

Или можно отключить установку кодировки web-сервером использую директиву:

CharsetDisable on

Переопределение страниц ошибок

Эти правила заменят стандартные страницы ошибок на указанные пользовательские страницы. Ссылка http://your_site.ua/error_page_404.html — и другие нужно заменить на ваши ссылки страниц ошибок:

ErrorDocument 404 http://your_site.ua/error_page_404.html
ErrorDocument 403 http://your_site.ua/error_page_403.html
ErrorDocument 500 http://your_site.ua/error_page_500.html

Указание нестандартного индексного файла

При открытии любого веб-сайта сервер ищет в корневой папке индексный файл, который по умолчанию задан как index.php или index.html. В случае, если наш индексный файл отличается от заданных по умолчанию, и называется, к примеру, main.php, мы можем это указать в .htaccess директивой:

DirectoryIndex main.php

Вывод

В данной статье рассмотрены примеры наиболее часто используемых правил .htaccess, которые будут полезны как и опытному разработчику, так и новичку в этой сфере. Но это далеко не все возможности конфигурации в .htaccess. В настоящее время использование файла .htaccess не является большой проблемой, поскольку практически все хостинги в своём программном обеспечении используют Apache и поддерживают настройки при помощи .htaccess. Потому данная тема уже много лет остается актуальной и информацию об этом легко можно найти на многих интернет ресурсах. Если возникает задача что-либо настроить при помощи .htaccess — скорее всего это уже кто-то делал, и можно просто найти готовое решение. Если же реализовать нужную настройку .htaccess вам не удалось, обращайтесь в нашу поддержку и мы найдём решение вместе.