Полезные возможности файла .htaccess

Полезные возможности файла .htaccess

Полезные возможности файла .htaccess

Ниже перечислены 19 возможных способов использования .htaccess для самых разных целей и приведены примеры кода.

Оглавление: {index}

Предназначение и расположение .htaccess

Этот файл позволяет управлять работой сервера с помощью особых команд, не меняя при этом ничего в главном конфигурационном файле, вроде .httpd.conf или apache.conf. Так вебмастера могут проводить настройку, особенно если у них нет доступа к главному файлу.

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

Расположение и редактирование файла

Если .htaccess расположен в корневой папке, то он будет задавать параметры для всего сайта. Если же поместить его в каталог, то он будет влиять только на этот каталог, и его директивы будут приоритетнее директив из корня. Можно иметь несколько версий этого файла: в разных каталогах и/или в корневой папке.

Также в некоторых CMS можно изменять файл с помощью административной панели. Например, в “Битрикс” он находится довольно легко, достаточно зайти в раздел “Контент – Файлы и папки”:

Даже если файл .htaccess отсутствует, можно просто создать его в любом текстовом редакторе и поместить его куда вам надо. Нужен всего лишь доступ к хостингу или по ftp.

Разметка файла .htaccess

У разметки файла .htaccess очень простые правила:

  • каждая команда начинается с новой строки
  • текст после знака # серверов не учитывается и может быть использован для комментарией
  • все изменения вступают в силу сразу же, без перезагрузки

Один из способов установки правил – регулярные выражения. Необходимо понимать спецсимволы и переменные для их чтения.

Основные спецсимволы:

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

Основные переменные:

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

Настройка редиректов для SEO.

Это самый популярный способ применения .htaccess, но некоторые CMS уже имеют включенную переадресацию на страницы со слешем. Вы можете прочитать в нашем блоге о настройках переадресации для SEO.

Два главных правила:

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

2. Организуйте перенаправления от частных к глобальным.

1. Настройка 301 редиректов между страницами.

Когда и зачем это нужно:

  • при изменении уровня вложенности у отдельной страницы;
  • если данной страницы больше нет;
  • при изменении URL.

Достаточно использовать команды простого перенаправления для 301 редиректа:

Redirect 301 /page1/ https://mysite.com/page2/

/page1/ — адрес страницы от корня, домен и протокол не указываем. Пример: /catalog/ofisnaya-mebel/kompjuternye-stoly/.

https://mysite.com/page2/ — полный адрес страницы переадресации. Пример: https://dom-mebeli.com/ofisnaya-mebel/stoly-v-ofis/.

2. Удаление дублей.

У каждой страницы должен быть лишь один адрес. Для этого необходимо настроить две вещи:

  • переадресацию на страницы со слешем и без.
  • “главное зеркало” — главный адрес сайта.

Для этого используется модуль mod_rewrite. Первой из них всегда идёт команда, запускающая изменения URL:

RewriteEngine On

Куда перенаправить: на слеш или нет?

Каждый вебмастер решает сам, куда лучше перенаправлять. Если у вас сайт новый, то обычно переадресация будет на страницу со слешем. Если же он существует достаточно долго, то лучше проверить, какие страницы чаще встречаются в индексе.

Можно проверить, нет ли редиректа по умолчанию, просто добавив или удалив слеш в конце адреса. Если произойдёт загрузка с новым адресом, то имеется дубль и нужна настройка. Лучше провести проверку с разными уровнями вложенности.

Код 301 редиректа на слеш:

RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Код 301 редиректа на страницы без слеша:

RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ /$1 [R=301,L]

3. Настройка главного зеркала.

Выберите адрес, который будет основным.

Редирект на HTTPS

RewriteEngine On

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}>

Решите главное зеркало без “www” или с ним:

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

Переадресация с www на без www

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

Переадресация с без www на www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

4. Перенаправление между разными доменами.

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

Примените один из двух вариантов кода:

RewriteEngine On
RewriteRule ^(.*)$ http://www.mysite2.com/$1 [R=301,L]

или

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mysite1.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite2.ru/$1 [R=301,L]

Замените «mysite1» адресом старого домена, а «mysite2» – вашего нового.

Усиление безопасности с помощью .htaccess

Файл .htaccess защитит от таких угроз, как:

  • опасные скрипты;
  • воровство контента;
  • DOS-атаки.

5. Запрет скачивания изображений с сайта.

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

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www.)?mysite.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ https://mysite.com/img/goaway.gif[nc]

Укажите свой адрес вместо «mysite.com» и добавьте изображение на адрес https://mysite.com/img/goaway.gif, которое и увидят посетители и владельцы сайта-вора.

6. Ограничение доступа.

Используя эти команды, вы можете ограничить доступ к сайту для:

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

Против вредных или ненужных User Agents (ботов):

SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get=”” post=”” head=””>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>

Список можете составить на свой вкус.

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

RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]

«Белый список», или ограничение для всех, кроме выбранных IP

ErrorDocument 403 https://mysite.com
Order deny,allow
Deny from all
Allow from IP1
Allow from IP2 и т. д.

Адрес «mysite.com» нужно поменять на соответствующий вашему ресурсу, а IP1, IP2 и так далее – на разрешенные IP-адреса.

“Чёрный список”, или ограничение только для выбранных IP

allow from all
deny from IP1
deny from IP2 и т. д.

Ограничение по выбранной подсети

allow from all
deny from 192.168.0.0/24

После «deny from» укажите маску подсети.

IP-адреса авторов комментариев видны в логах сервера или в панели администрирования.

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

<files myfile.html>
order allow,deny
deny from all
</files>

Вместо «myfile.html» пишите название своего файла. При попытке получить к нему доступ будет отображаться ошибка 403.

Нужно защитить и сам .htaccess, когда закончите работу с правилами в нём. Рекомендуем установить на него “только чтение” для всех групп пользователей.

<Files .htaccess>
order allow,deny
deny from all
</Files>

Ограничение переходов с конкретных сайтов

Можно также ограничивать доступ с конкретных сайтов.

RewriteEngine on
RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
RewriteRule .* - [F]

7. Защита доступа к конкретному файлу или папке.

Создайте новый файл под названием .htasswd в корне. Впишите логины с паролями по типу «user:password». Зашифруйте пароли, используя генераторы, вроде этого. Затем вносите файлы или разделы в .htaccess:

Защита доступа к файлу

AuthType Basic
AuthName “”
AuthUserFile /pub/home/.htpasswd
Require valid-user

Защита доступа к папке

resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /pub/home/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Укажите, начиная с корневой папки, путь к созданному файлу .htpasswd, вместо «/pub/home/.htpasswd». Проверьте доступ после завершения работы.

8. Пресечение вредоносных скриптов.

От атак хакеров с помощью «скриптовых инъекций» защитят эти команды:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

9. Предотвращение DOS-атак.

Для защиты от DOS-атак укажите максимальный лимит на размер загружаемых файлов в байтах.

LimitRequestBody 10240000

Для полного запрета на любые загрузки, укажите значение ниже 1 МБайта. Почитайте официальную документацию, чтобы изучить команды LimitRequestFields, LimitRequestFieldSize и LimitRequestLine.

Настройка отображения сайта

10. Замена индексного файла.

Индексный файл по умолчанию открывается при обращении к тому или иному каталогу.

В структуре каталога он выглядит вот так вот:

Чтобы открывался другой файл, в этом же каталоге нужно добавить .htaccess и прописать:

DirectoryIndex hello.html

Адрес нужного файла пропишите на месте «hello.html». Можно написать несколько файлов, тогда при недоступности первого будет загружаться второй в строке, и так далее, по порядку.

DirectoryIndex hello.html hello.php hello.pl

11. Добавление или удаление html в конце адреса.

Удалять или нет расширение в конце адреса – дело вкуса.

Добавление расширения:

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Удаление расширения:

RewriteBase /
RewriteRule (.*).html$ $1 [R=301,L]

Точно также удаляется или добавляется .php.

12. Настройка кодирования.

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

С помощью .htaccess можно задать кодировку, если она ещё не задана у каждой страницы сайта в метатеге.

В пределах одного ресурса кодировки должны совпадать во всех подобных командах для правильной работы сайта.

Эта команда устанавливает для всех файлов UTF-8:

AddDefaultCharset UTF-8

А эта директива преобразует в Windows-1251 все файлы, которые будут загружены на сервер:

CharsetSourceEnc WINDOWS-1251

13. Создание персонализированных страниц ошибок.

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

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

С кастомной страницей пользователь сможет пройти по указанным вами ссылкам на работающие разделы вашего ресурса.

Оптимизация функционирования сайта.

Вы можете сделать загрузку быстрее с помощью .htaccess, используя кэширование и/или сжатие компонентов.

14. Сжатие компонентов сайта.

Сжатые файлы ускоряют загрузку, но сильнее нагружают сервер. Используйте один из модулей:

  • mod_zip. Подходит для работы с масками.
  • mod_deflate. В нем сжимаемые типы файлов нужно перечислять.

Модуль Gzip:

mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

Модуль mod_deflate:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

15. Усиленное кэширование.

При повторном посещении кэшированный контент ускоряет загрузку ресурса.

FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch “.(jpg|gif|png|css|js)$”>
ExpiresActive on
ExpiresDefault “access plus 1 week”
</filesmatch>
</ifmodule>

Вместо «1 week» вы можете указать любую подходящую вам единицу измерения времени и в любом количестве.

ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"

Кэшируются такие виды контента, как:

  • image/x-icon;
  • image/jpeg;
  • image/png;
  • image/gif;
  • application/x-shockwave-flash;
  • text/css;
  • text/javascript;
  • application/javascript;
  • application/x-javascript;
  • text/html;
  • application/xhtml+xml.

Дополнительные возможности

16. Контроль настроек php.

Если программисты доступом непосредственно к файлу php.ini не располагают, то они могут работать с настройками php через .htaccess.

php_value upload_max_filesize 125M
php_value post_max_size 20M
php_value max_execution_time 60

Что эти строки, собственно, означают:

  • «upload_max_filesize» – это лимит в мегабайтах для загружаемых файлов;
  • «post_max_size» – это лимит для объема постинга;
  • «max_execution_time» – предельное время на обработку скриптов, указанное в секундах.

17. Борьба со спам-комментариями через WordPress.

Чтобы спамеры не могли добраться до файла wp-comments-post.php, используйте следующие команды:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post.php*
RewriteCond %{HTTP_REFERER} !.*mysite.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

18. Установка электронной почты для администрации.

Сообщения обо всех важных событиях на сервере будут идти на один конкретный адрес электронной почты.

ServerSignature EMail
SetEnv SERVER_ADMIN Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

19. Предупреждения о недоступности по техническим причинам

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

RewriteEngine on
RewriteCond %{REQUEST_URI} !/info.html$
RewriteCond %{REMOTE_HOST} !^12.345.678.90
RewriteRule $ https://mysite.ru/info.html [R=302,L]

Памятка по принципам работы с файлом .htaccess

  • Перед любыми изменениями, чтобы была возможность «откате» – делайте копию файла;
  • Вносите изменения по одному и проверяйте, как работает сайт, прежде чем вносить следующее;
  • При создании нескольких копий .htaccess в разных каталогах, версия в дочернем подразделе унаследует директивы от версии в родительском или в корне. В дочерней версии нужно ввести только новые команды, предназначенные для этого каталога.
  • Не забывайте чистить кэш браузера! Горячие клавиши: Ctrl+F5 (или Ctrl+R в Safari, или Cmd+R в Mac OS);
  • Ошибка 500 означает, что нужно проверить синтаксис в .htaccess на наличие опечаток, в чем могут помочь онлайновые сервисы, вроде этого. При отсутствии ошибок следует обращаться к программисту и хостинг-провайдеру, потому что дело тогда в главном файле конфигурации, запрещающем такой тип команд;
  • Кириллица неприменима в .htaccess. Для кириллических доменов используйте метод написания punycode, который вы можете узнать через whois-сервис.;
  • Используйте этот файл, только если нет более простого способа решения той же задачи, потому что перегрузка его командами пагубно влияет на работоспособность.

Остались вопросы?

Мы работаем без выходных и обеда. Спим тоже мало,

так что готовы отвечать на все ваши вопросы!

8 800 100 66 82 info@p-gp.ru

Мы делаем сайты для всей России и СНГ!

Создание (разработка) сайтов от 2495 р. под ключ от 3 дней. - Parallel Group т. 8-800-100-66-82

Наша компания занимается разработкой различных видов сайтов более 10 лет, поэтому мы всегда сможем найти для вас подходящее решение. Закажи официальный сайт в Parallel GROUP.

Разработка сайтов это - наша работа! Заказать сайт дешево и качественно можно у нас.

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

Регистрация доменов RU, SU, COM, NET и др. от R01.RU

Контакты

г. Новосибирск, ул. Станционная 62/1, офис 619

г. Москва, Коровинское шоссе дом 35 стр. 12

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

8 800 100 66 82 Россия (звонок бесплатный)

8 (383) 380 74 06 г. Новосибирск