Для чего нужен файл .htaccess
.htaccess (сокращение от «hypertext access») — это конфигурационный файл для веб-сервера Apache.
Файл .htaccess работает только с веб-сервером Apache.
У других веб-серверов, например Nginx, свои конфигурационные файлы.
Параметры, указанные в .htaccess, не затрагивают основные настройки веб сервера Apache — httpd.conf.
Они влияют только на каталоги (и их подкаталоги), в которых этот файл размещен.
Ознакомиться с тарифами хостинга сайтов можно тут
Где находится файл .htaccess?
Файл .htaccess должен распологаться в корневом каталоге вашего сайта.
Для подкаталогов тоже можно создавать .htaccess файлы, но учтите, что они будут мешать настройкам файла .htaccess, размещенным на уровне выше.
Если вы используете CMS, скорее всего, этот файл был создан программой автоматически и чаще всего его можно найти в корневой папке сайта.
Что можно сделать с помощью .htaccess
Настроить переадресацию (редирект):
с одного домена на другой,
с протокола HTTP на HTTPS.
Ограничить или разрешить доступ к сайту с определенных IP-адресов.
Это позволит контролировать доступ, а также отражать хакерские атаки.
Например, во время DDoS-атаки можно запретить обработку запросов с определенных IP, что не даст злоумышленнику нарушить работоспособность сервера.
Запретить доступ к конкретным файлам. Если сайт содержит папку с конфиденциальной информацией, ей нужна дополнительная защита.
Через .htaccess можно настроить доступ по логину и паролю.
Назначить кодировку по умолчанию. Если на сайте вы увидели не текст, а набор непонятных символов — на сайте указана неправильная кодировка.
Самая распространенная кодировка — UTF-8. Указать правильную настройку и починить сайт можно в .htaccess.
Указать, какие страницы должны отображаться у пользователей, при ошибках системы (400, 403, 404, 502 и другие ошибки).
Чтобы немного сгладить неприятное впечатление пользователя от проблемы, можно создать красочную страницу ошибки и в .htaccess указать, при каких проблемах показывать ту или иную страницу.
Запретить поисковым роботам индексировать страницу. Поисковые роботы изучают все веб-страницы в интернете, если по какой-либо причине вы хотите скрыть страницу от роботов, просто запретите индексацию в файле .htaccess.
Настроить параметры PHP. Настраивать PHP можно не только в php.ini, но и в .htaccess.
Весь список директив, которые возможно использовать в .htaccess, можно найти в официальной документации PHP и Apache.
Как работает .htaccess
Когда веб-сервер получает запрос(пользователь открывает страницу сайта), сначала он проверяет, есть ли .htaccess в файлах сайта.
Проверка начинается с корневого каталога и затем всё ниже и ниже по иерархии папок.
Если файл найден, веб-сервер изучает команды, описанные в .htaccess, и применяет их при дальнейшей обработке запроса.
Как выглядит .htaccess
.htaccess — простой текстовый файл, где в каждой строке указана команда (директива). Пустые строки игнорируются.
Символ «#» в начале строки — комментарий. Система не читает эти строки. Их используют для удобства, чтобы описать смысл конкретной команды или блока.
Редиректы .htaccess
Если при настройке редиректов вы используете кириллические домены, в .htaccess их нужно указывать в формате Punycode. Перевести веб-адрес в нужный формат можно с помощью специального сервиса, например 2ip.ru
Примеры редиректов через .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 строки:
<Files ПУТЬ_К_ФАЙЛУ>
Order Deny,Allow
Deny from all
Allow from IP
</Files>
Где:
ПУТЬ_К_ФАЙЛУ — путь к файлу, к которому нужно ограничить доступ;
IP — IP-адрес, для которого вам нужно разрешить доступ.
Назначение кодировки
Для этого добавьте строку:
AddDefaultCharset utf-8
Отображение возникающих ошибок 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