Раздел помощи SpaceWeb

Файл .htaccess

12 дек, 2023

 Для чего нужен файл .htaccess

.htaccess (сокращение от «hypertext access») — это дополнительный конфигурационный файл для Apache. Веб-сервер должен учитывать параметры, указанные в файле, когда обрабатывает запрос.
Обратите внимание, что .htaccess работает только с Apache. У других веб-серверов, например Nginx, есть свои файлы.

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

Где находится файл .htaccess? Если вам нужно, чтобы настройки .htaccess работали для всего сайта, разместите его в корневом каталоге. Для подкаталогов тоже можно создавать .htaccess-файлы, но учтите, что они будут мешать настройкам файла .htaccess, размещенным на уровне выше. Если вы используете CMS, скорее всего, этот файл был создан программой автоматически и чаще всего его можно найти в папке «public_html» или «www».

Что можно сделать с помощью .htaccess

  1. Настроить переадресацию (редирект):
  2. Ограничить или разрешить доступ к сайту с определенных IP-адресов. Это позволит контролировать доступ, а также отражать хакерские атаки. Например, во время DDoS-атаки можно запретить обработку запросов с определенных IP, что не даст злоумышленнику нарушить работоспособность сервера.
  3. Запретить доступ к конкретным файлам. Если сайт содержит папку с конфиденциальной информацией, ей нужна дополнительная защита. Через .htaccess можно настроить доступ по логину и паролю.
  4. Назначить кодировку по умолчанию. Если на сайте вы увидели не текст, а набор непонятных символов — на сайте указана неправильная кодировка. Самая распространенная кодировка — UTF-8. Указать правильную настройку и починить сайт можно в .htaccess.
  5. Указать, какие страницы должны отображаться у пользователей, при ошибках системы. На сайтах могут быть 400, 403, 404, 502 и другие ошибки. Чтобы немного сгладить неприятное впечатление пользователя от проблемы, нужно создать красочную страницу ошибки и в .htaccess указать, при каких проблемах показывать ту или иную страницу.
  6. Запретить поисковым роботам индексировать страницу. Поисковые роботы изучают все веб-страницы в интернете, если по какой-либо причине вы хотите скрыть страницу от роботов, просто запретите индексацию в файле .htaccess.  
  7. Настроить параметры PHP. Настраивать PHP можно не только в php.ini, но и в .htaccess.

Весь список директив, которые возможно использовать в .htaccess, можно найти в официальной документации PHP и Apache:

  1. Список директив php.ini.
  2. Работа с веб-сервером Apache.

Как работает .htaccess

​​Когда веб-сервер получает запрос, например, данные определенной страницы сайта, сначала он проверяет, есть ли .htaccess в файлах сайта. Проверка начинается с корневого каталога и затем всё ниже и ниже по иерархии папок. Если файл найден, веб-сервер изучает команды, описанные в .htaccess, и применяет их при дальнейшей обработке запроса.

Как выглядит .htaccess

.htaccess  — простой текстовый файл, где в каждой строке указана команда (директива). Пустые строки игнорируются.

Символ «#» в начале строки — комментарий. Система не читает эти строки. Их используют для удобства, чтобы описать смысл конкретной команды или блока.

Как создать .htaccess

Многие CMS (WordPress, Joomla, 1С-Битрикс и другие) создают файл .htaccess автоматически. Найти его можно в корневой папке в панели управления хостингом. Обычно он пустой или с парой комментариев. То есть вы сразу можете начинать работу с нужными командами.

Если же сайт был написан с нуля или вы случайно удалили существующий файл, нужно:

  1. Создать файл .htaccess вручную на устройстве.
  2. Перенести созданный файл на виртуальный хостинг.

Этап 1. Создайте файл .htaccess: инструкция для Windows

Если вы работаете на Windows, создать .htaccess можно в Блокноте.

  1. Откройте Блокнот.
  2. Нажмите Файл → Сохранить как …:

  1. В строке «Тип файла» выберите Все файлы. В строке «Имя файла» введите .htaccess и нажмите Сохранить:

  1. Файл создан. Если, несмотря на выбранные параметры, файл сохранился в формате .htaccess.txt, нужно убрать txt-расширение. Для этого откройте проводник, перейдите во вкладку Вид и уберите галочку напротив пункта Расширения имен файлов:

Этап 2. Разместите файл на хостинге SpaceWeb

Когда файл готов, его нужно разместить на хостинге в корневом или обычном каталоге.

  1. Перейдите в раздел Хостинг Файловый менеджер.
  2. Выберите папку, в которую хотите поместить файл .htaccess и нажмите на значок Загрузить файлы:

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

Этап 3. Сообщите Apache, что он должен использовать .htaccess

Чтобы Apache использовал в своей работе файл .htaccess, в httpd.conf нужно добавить строку:

AllowOverride All

Настройка .htaccess

А теперь покажем, какие директивы (команды) для настройки .htaccess могут вам понадобиться для сайта.

Редиректы

Если при настройке перенаправлений вы используете кириллические домены, в .htaccess их нужно указывать в формате Punycode. Перевести веб-адрес в нужный формат можно с помощью специального сервиса, например 2ip.

Все способы редиректа в .htaccess вы можете прочитать в нашей статье Как настроить редирект через .htaccess. Здесь расскажем о двух основных настройках.

Переадресация на другой домен

Укажите в файле .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} olddomain.ru
RewriteRule (.*) http://newdomain.ru/$1 [R=301,L]

Где:

  • olddomain.ru — домен, с которого вы настраиваете перенаправление;
  • newdomain.ru — домен, на который нужно перенаправить пользователей.

Переадресация сайта с HTTP на HTTPS

Обратите внимание, что перенаправление с HTTP на HTTPS нужно делать в файле .htaccess в корневой папке сайта. Введите:

RewriteEngine on
SetEnvIf X-Forwarded-Proto https SERVER_PORT=443
SetEnvIf X-Forwarded-Proto https HTTPS=on
RewriteCond %{HTTP:HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Переадресация поддомена в подкаталог сайта

Чтобы настроить переадресацию запросов на поддомен в подкаталог сайта добавьте в файл .htaccess строки:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} (www\.)?img\.example\.com$
RewriteCond %{REQUEST_URI} !img/
RewriteRule ^(.*)$ img/$1

Где:
img\.example\.com ― поддомен, с которого должна переадресовываться страница.
img ― подкаталог, в котором находятся файлы поддомена.
Экранирование точки обратной косой чертой (\) в строке 3 необязательно.

Ограничение или разрешение доступа к сайту с определенных IP-адресов

Чтобы ограничить доступ к сайту с определенных IP-адресов в файл .htaccess добавьте:

Order Allow,Deny
Allow from all
Deny from IP

Вместо IP в третьей строке укажите, тот IP-адрес, который хотите ограничить, или список IP-адресов через пробел.
Чтобы разрешить доступ к сайту только с определенных IP-адресов, добавьте:

Order Deny,Allow
Deny from all
Allow from IP

Вместо IP в третьей строке укажите IP-адрес (или список IP-адресов через пробел), которому хотите разрешить доступ к сайту.
Подробнее об этой директиве можно прочитать в статье Как запретить доступ к сайту через файл .htaccess.

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

Для этого добавьте в .htaccess строки:

<Files ПУТЬ_К_ФАЙЛУ>
Order Deny,Allow
Deny from all
Allow from IP
</Files>

Где:

  • ПУТЬ_К_ФАЙЛУ — путь к файлу, к которому нужно ограничить доступ;
  • IP — IP-адрес, для которого вам нужно разрешить доступ.

Назначение кодировки

Для этого добавьте строку:

AddDefaultCharset utf-8

Для корректной установки CMS Bitrix
Для корректной установки CMS Bitrix в файле .htaccess необходимо указать следующие строки:

php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2
php_value max_input_vars 10000
php_value pcre.recursion_limit 1000

Отображение возникающих ошибок PHP на странице

Чтобы контролировать работу сайта, нужно настроить отображение ошибок PHP. Один из способов это сделать ― добавить директиву в .htaccess:

php_flag display_errors on
php_value error_reporting -1

Настройка страниц ошибок

Чтобы настроить отображение страниц ошибок, используйте директиву ErrorDocument. Формула для составления команды:
ErrorDocument + номер ошибки + путь к странице с ошибкой или текстовое сообщение.
Примеры:

ErrorDocument 404 /errors/not_found.php
ErrorDocument 401 /info.html
ErrorDocument 403 "you shall not pass"
ErrorDocument 500 http://example.com/500.php