Файл .htaccess — это системный файл для настройки сайта на web сервере Apache. Правила в этом файле применяются только для того каталога (сайта), где размещен файл. Это позволяет настроить правила для разных сайтов на одном хостинге.
Общие сведения
Веб-сервер Apache обеспечивает работу сайтов и его конфигурация задана в системном файле apache.conf или httpd.conf (зависит от от ОС). Так как редактирование это файла связано с рисками, что веб сервер будет сломан и перестанет работать, был создан файл .htaccess. Редактирование этого файла связано с меньшими рисками и затрагивает только 1 сайт, а не весь сервер сразу же.
Создание и редактирование .htaccess
Чтобы создать файл .htaccess необходимо в корневом каталоге сайта на вашем сервере создать файл с названием .htaccess (с точкой в начале). Это должен быть текстовый файл. Более детальные инструкции написаны на сайтах хостингов. Пример такой инструкции.
Примеры настроек
Ниже приведены примеры стандартных настроек файла .htaccess. Хорошая техническая инструкция по настройке и синтаксису доступна по ссылке.
Перенаправления и 301 редирект
- Перенаправления всего сайта на новый домен:
Redirect 301 / http://www.newdomain.com/ - Перенаправления одной страницы на другую:
Redirect 301 /page1.html http://mydomain.com/page2.html
Механизм перенаправления (редиректа) запросов
Для управления тем, как запросы обрабатываются веб-сервером, Apache использует модуль перенаправления и перезаписи запросов (mod rewrite).
Использование .htaccess является лучшим вариантом для их настройки, поскольку правила обработки запросов обычно всегда меняются в зависимости от определенных сайтов и папок.
Включите следующую команду в ваш файл .htaccess, чтобы разрешить перенаправление запросов:
RewriteEngine
В зависимости от вашей уникальной ситуации, существует список точных команд для настройки перенаправления.
Директиву «RewriteEngine on» в файле .htaccess достаточно использовать один раз на весь сайт.
Склейка разных адресов одного сайта
- Перенаправления сторінки на новый домен:
RewriteRule ^page1\.html$ http://newdomain.com/ [R=301] - Перенаправления сайту з домену без www на домен з www:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301] - И наоборот:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] - Перенаправление с http на https протокол (предварительно надо поставить SSL сертификат):
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Эти строки надо добавлять в самом начале файла. - Подмена страниц на сервере
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 месяца с момента модификации файла.
Обговорення
0 коментарівБудьте першим, хто поділиться своєю думкою!