.htaccess — файл дополнительной конфигурации веб-сервера Apache. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера у отдельных пользователей (а так же на различных директориях отдельных пользователей), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., не предоставляя доступа к главному конфигурационному файлу т.е. не влияя на работу всего сервиса целиком.
Как правило, .htaccess располагается в корневом каталоге сайта на хостинге.
В случае отсутствия файла в корневом каталоге сайта, Вы можете создать его самостоятельно.
Записи, вносимые в .htaccess называются директивами. Директивы действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).
Далее рассматриваются варианты записи некоторых директив.
1. Директива простого перенаправления (редирект)
Предположим необходимо переадресовать пользователя сайта на другой сайт (URL), для этого Вам необходимо в файл .htaccess дабавить следующую строчку:
Redirect 301 / http://www.example.com
где http://www.example.com - URL на который идет перенаправление
2. Директивы сложного перенаправления (mod_rewrite).
Модуль mod_rewrite — это мощнейшее, интеллектуальное средство преобразования URL адресов. С ним возможны почти все типы преобразований, которые могут выполняться или нет в зависимости от разных условий, факторов.
Некоторые примеры использования данной директивы:
- если Ваш сайт поддерживает как обычное соединение(http) так и шифрованное(https), то часто возникает необходимость перенаправить весь трафик http на https незаметно для пользователя.
Для этого прописываем следующее правило:
- Редирект на https без www
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{SERVER_PORT} !^443
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ https://yourdomain.by%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP:X-SSL-Emu} !on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
- Редирект на https с www
RewriteEngine On
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{SERVER_PORT} !^443
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ https://www.yourdomain.com%{REQUEST_URI} [R=301,L]
- закрываем доступ к веб-сайту в рабочее время;
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900
RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800
RewriteRule .* - [ F ]
- сайт перенесен с одного домена на другой с domain.com на domain2.com.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [R=301,1]
RewriteRule ^(.*)$ http://www.domain2.com/
3. Обработка ошибок
В ходе работы сервера иногда возникают ошибки, скорее это будет правильней назвать не сбоями в работе сервера, а стандартными кодами возврата. Говоря простым языком: сервер отвечает пользователю на невыполненный запрос кодом возврата, зная значение которого можно понять, с чем конкретно связана ошибка при запросе информации у сервера.
Коды, начинающиеся с 4хх и 5хх причисляются к разряду ошибок.
При возникновении ошибки 4xx или 5xx посетитель Вашего сайта увидит в браузере сообщение от сервера, которое вряд ли можно назвать предельно понятным рядовому пользователю. Apache предоставляет возможность выдать вместо аскетичного технического текста, не изобилующего деталями, свою страницу, где Вы можете человеческим языком объяснить пользователю, что произошло и что делать.
Пример переопределения страниц ошибок приведен ниже:
- ситуация, когда посетитель обращается к несуществующей странице;
ErrorDocument 404 http://domain.com/error/404.htm
- в случае, когда доступ к странице ограничен;
ErrorDocument 403 http://domain.com/error/403.htm
- в запросе посетителя обнаружена синтаксическая ошибка;
ErrorDocument 400 http://domain.com/error/400.htm
- любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса.
ErrorDocument 500 http://domain.com/error/500.htm
4. Кодировка
Иногда браузер пользователя не может корректно определить тип кодировки выдаваемого документа. Для решения этой проблемы используемая кодировка указывается в настройках Web-сервер Apache и заголовке передаваемого документа. Причем для корректного распознания эти кодировки должны совпадать. На наших серверах по умолчанию используется кодировка UTF-8.
Ниже приводины некоторые варианты настроек .htaccess:
- указание кодировки по умолчанию;
AddDefaultCharset UTF-8
или
AddDefaultCharset WINDOWS-1251
- ситуация, когда все загружаемые на сервер файлы будут автоматически перекодированы в заданный формат.
CharsetSourceEnc UTF-8
5. Настройка максимального размера загружаемых файлов в PHP.
Максимальный размер загружаемых файлов указывается в .htaccess с помощью двух директив:
php_value upload_max_filesize 20M
php_value post_max_size 20M
Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M. Обратите внимание, что символ "M" (латинская M) указывается слитно со значением.
6.Ограничение доступа к сайту по IP-адресам.
Часто возникает ситуация, когда необходимо запретить доступ к сайту для одного или нескольких IP-адресов или запрети доступ всем IP-адресам, кроме конкретного.
Примеры некоторых вариантов настройки:
- запрет доступа для конкретного IP-адреса;
Order Allow,Deny
Allow from all
Deny from 192.168.1.1.
где 192.168.1.1. - IP-адрес, которому запрещается доступ(в конце обязательно должна быть точка).
- запрет доступа к сайту всем, кроме конкретного IP-адреса;
Order Deny,Allow
Deny from all
Allow from 192.168.1.1.
где 192.168.1.1 - IP-адрес, которому доступ будет открыт.
- запрет любым хостам доступ к файлам с расширениями .txt и .dat (например, в них могут храниться внутренние данные скриптов).
<FilesMatch "\.(txt|dat)$">
Order Deny,Allow
Deny from all
С более подробной информацией о возможностях работы с файлом .htaccess Вы можете ознакомиться на официальном сайте Apache.