Перейти к содержимому

Создание и настройка файла .htaccess

  • автор:

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

Общие сведения

Веб-сервер Apache обеспечивает работу сайтов и его конфигурация задана в системном файле apache.conf или httpd.conf (зависит от от ОС). Так как редактирование это файла связано с рисками, что веб сервер будет сломан и перестанет работать, был создан файл .htaccess. Редактирование этого файла связано с меньшими рисками и затрагивает только 1 сайт, а не весь сервер сразу же.

Создание и редактирование .htaccess

Чтобы создать файл .htaccess необходимо в корневом каталоге сайта на вашем сервере создать файл с названием .htaccess (с точкой в начале). Это должен быть текстовый файл. Более детальные инструкции написаны на сайтах хостингов. Пример такой инструкции

Примеры настроек

Ниже приведены примеры стандартных настроек файла .htaccess. Хорошая техническая инструкция по настройке и синтаксису доступна по ссылке

Перенаправления и 301 редирект

  1. Перенаправления всего сайта на новый домен:
         Redirect 301 / http://www.newdomain.com/
  2. Перенаправления одной страницы на другую:
         Redirect 301 /page1.html http://mydomain.com/page2.html

Механизм перенаправления (редиректа) запросов

Для управления тем, как запросы обрабатываются веб-сервером, Apache использует модуль перенаправления и перезаписи запросов (mod rewrite). 

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

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

     RewriteEngine

В зависимости от вашей уникальной ситуации, существует список точных команд для настройки перенаправления.

Директиву «RewriteEngine on» в файле .htaccess достаточно использовать один раз на весь сайт.

Склейка разных адресов одного сайта

  1. Перенаправления сторінки на новый домен:
         RewriteRule ^page1\.html$ http://newdomain.com/ [R=301]
  2. Перенаправления сайту з домену без www на домен з www:
         RewriteEngine On
         RewriteCond %{HTTP_HOST} !^www\..* [NC]
         RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]
  3. И наоборот:
         RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
         RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
  4. Перенаправление с http на https протокол (предварительно надо поставить SSL сертификат):
         RewriteEngine On
         RewriteCond %{HTTPS} !on
         RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    Эти строки надо добавлять в самом начале файла.
  5. Подмена страниц на сервере
         RewriteRule ^page1\.html$ /page2.html [L]

Модификация URL в htaccess

.htaccess чаще всего используется для создания перенаправлений или модификации URL во время выполнения.

За эту функцию отвечает модуль mod rewrite, который часто включается в настройках Apache.

RewriteBase указывает префикс адреса, RewriteCond проверяет соответствие, а RewriteRule обновляет URL в соответствии с регулярным выражением, если все правила соответствия удовлетворены. Эти три директивы используются для изменения URL в файлах htaccess.

В случае, если модуль в настоящее время не активен, необходимо сначала включить Mod Rewrite:

     RewriteEngine on

Укажем, что в качестве префикса для URL нужно использовать корень:

     RewriteBase /

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

     RewriteRule index.html /index.php

Для более эффективной замены можно использовать регулярные выражения, которые состоят из обычных символов, чисел, специальных символов и переменных.

Основными специальными символами являются следующие:

  • ^ — начало строки;
  • $ — конец строки;
  • . — любой символ;
  • * — любое количество любых символов;
  • ? — один определенный символ;
  • [0-9] — последовательность символов, например, от 0 до 9;
  • | — символ или, выбирается или одна группа, или другая;
  • () — иcпользуется для выбора групп символов.

В регулярных выражениях файла .htaccess можно использовать переменные из заголовков запроса:

  • %{HTTP_USER_AGENT} — поле User-Agent, которое передает браузер пользователя;
  • %{REMOTE_ADDR} — IP адрес пользователя;
  • %{REQUEST_URI} — запрашиваемый URI;
  • %{QUERY_STRING} — параметры запроса после знака ?.

Хотя их гораздо больше, это наиболее часто используемые. С остальными вы можете ознакомиться в официальной литературе. Регулярные выражения предоставляют больше возможностей, например, можно заменить следующие слова во всех html-страницах на php:\

     RewriteEngine On;

     RewriteBase /;

     RewriteRule ^(.*)\.html$ $1.php

Директива RewriteCond дает еще больше гибкости. Она позволяет добавлять настройки для конкретного варианты URL.

     RewriteBase /;

     RewriteCond % {HTTP_HOST} ^www.site.ua$

     RewriteRule ^(.*)\.html$ $1.php

Управление доступом к сайту

Разрешить доступ конкретным IP (для остальных доступ запрещен):

     Require ip 1.1.1.1

     Require ip 2.2.2.2

Несколько IP-адресов могут указываться через пробел или отдельными директивами, каждая в новой строке.

Запретить доступ конкретным IP (для остальных доступ разрешен). Для работы запрещающих директивы, их необходимо заключать в блоки <RequireAll>:

     <RequireAll>

     Require all granted

     Require not ip 1.1.1.1

     </RequireAll>

При использовании Allow,Deny:

Разрешить доступ всем, кроме конкретного IP:

     Order Allow,Deny

     Allow from all

     Deny from 1.1.1.1

Запретить доступ всем, кроме конкретного IP:

     Order Deny,Allow

     Deny from all

     Allow from 1.1.1.1

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

     Deny from all

Аналогичным образом можно настроить доступ к конкретным файлам, включив эти директивы в блоки <Files>, например:

     <Files myfile.html>

     Require all denied

     Require ip 1.1.1.1

     </Files>

     <Files myfile.html>

     Order Deny,Allow

     Deny from all

     Allow from 1.1.1.1

     </Files>

Защита сайта или директории паролем. Базовая аутентификация

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

Сначала создайте логин и пароль, которые будут использоваться для доступа к учетной записи.

Для этого откройте SSH-соединение с учетной записью и выполните следующую команду с нужными значениями:

пароль для логина htpasswd: 

     htpasswd -bc

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

Используйте приведенную выше команду еще раз, если в будущем вам понадобится изменить заданный пароль.

Создайте файл с именем. htaccess в директории, которую вы хотите защитить паролем, например wp-admin, и заполните его следующей информацией, заменив и user на первую букву вашего логина и сам логин:

     AuthType Basic

     AuthName «Authentication Required»

     AuthUserFile /home/u/user/.htpasswd

     require valid-user

Эта вставка должна быть сделана в общий файл .htaccess, находящийся в публичной html-директории вашего сайта, если мы говорим о защите всего сайта.

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

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

     DirectoryIndex main.php

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

Веб-сервер предоставит краткое уведомление и код ошибки в случае возникновения каких-либо ошибок при создании страницы. Но если вы создадите отдельную страницу для каждой проблемы, дополненную изображениями и подробным объяснением, пользователи поймут ее гораздо лучше.

Здесь очень поможет настройка htaccess. Можно воспользоваться директивой ErrorDocument. Для ошибок 4xx и 5xx с ее помощью можно указать html-страницы.

Например, для 404

     ErrorDocument 404 http://site.ua/error/404.shtml

     ErrorDocument 403 http://site.ua/error/403.shtml

     ErrorDocument 401 http://site.ua/error/401.shtml

     ErrorDocument 500 http://site.ua/error/500.shtml

Блокировка запросов по User-Agent

Можно ограничить доступ к сайту для определенных User-Agent:

     RewriteCond %{HTTP_USER_AGENT} (SolomonoBot|MJ12Bot)

     RewriteRule ^.*$ — [R=404,L]

Кодировка

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

     AddDefaultCharset UTF-8

или

     AddDefaultCharset WINDOWS-1251

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

     CharsetDisable on

Ограничения по видам запросов

Для применения ограничений для определенных методов запросов можно использовать блоки <Limit>:

     SetEnvIfNoCase User-Agent SolomonoBot bad_bot

     SetEnvIfNoCase User-Agent MJ12Bot bad_bot

     <Limit GET POST HEAD>

     Order Allow,Deny

     Allow from all

     Deny from env=bad_bot

     </Limit>

Для новых версий Apache, начиная с 2.4, оптимально использовать директивы Require и заключать их в блоки <RequireAll>:

     SetEnvIfNoCase User-Agent SolomonoBot bad_bot

     SetEnvIfNoCase User-Agent MJ12Bot bad_bot

     <Limit GET POST HEAD>

     <RequireAll>

     Require all granted

     Require not env bad_bot

     </RequireAll>

     </Limit>

Управление кэшированием данных

Файл .htaccess можно использовать для задания различных сроков кэширования контента вашего сайта. Целесообразно увеличить срок кэширования для редко меняющихся данных, чтобы ускорить загрузку сайта. Например, следующий код

     ExpiresActive on

     ExpiresByType image/jpeg «access plus 1 day»

     ExpiresByType image/gif «modification plus 3 months»

     ExpiresByType text/html «now»

отключает кэширование для HTML, для изображений JPEG устанавливает срок в 1 день с момента обращения, а для GIF — 3 месяца с момента модификации файла.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *