И что с ним можно сделать полезного
Файл .htaccess — это файл для локальной настройки веб-сервера, той программы, которая отдаёт нам сайт. Первый раз мы про него говорили, когда публиковали сайт в интернете, а потом — когда настраивали политику безопасности для сайта. Но это не всё, на что способен .htaccess.
Кратко: сайт, сервер и клиент
На всякий случай вводим в курс дела:
Когда вы заходите на сайт, вы на самом деле не заходите не на сайт.
На самом деле вы делаете запрос на удалённый компьютер.
На удалённом компьютере есть программа, она называется «сервер», то есть «раздатчик».
Сервер получает ваш запрос и обрабатывает его. Это похоже на работу официанта: вы пришли в ресторан, он принял ваш заказ и пошёл раздавать задания на кухню и в бар
Когда заказ готов (например, собрана ваша веб-страница), сервер отдаёт её вам по каналу связи. Вы получаете свою страницу. Вам кажется, что вы зашли на сайт, а на самом деле сайт изготовил вам персонально вашу страничку, а вы её получили.
Подробнее об этом: как устроен интернет
Что такое .htaccess
.htaccess — это файл, в котором записаны инструкции для сервера. Это то же самое, что инструкция официанта, например, «рыбов не продаём». Только официант может эти инструкции запомнить, а серверу нужно записывать. Для этого и нужен файл.
В файле .htaccess можно настроить многое: безопасность, запреты скачивания контента, работу со скриптами, быстродействие сайта и его поведение в разных нештатных ситуациях.
Чтобы добавить любую настройку, скопируйте её код, вставьте его в любое место файла .htaccess и замените наши данные на свои. После этого не забудьте сохранить файл.
👉 В этой статье мы собрали самые простые и полезные настройки файла .htaccess. Если вам нужны все настройки, почитайте официальную документацию.
Что за странное название — .htaccess?
Это тема из Линукса и веб-сервера Apache. Если не в курсе, читайте нашу статью про Linux.
Если вы работаете на Windows, у вас может быть привычка, что у всех файлов должно быть расширение (например, .exe или .pdf). В Линуксе не так: там файлы могут быть вообще без расширения, а тип файла заложен в самом файле, а не в названии.
Поэтому для Линукса нет проблемы с названиями типа .htaccess — это просто очередной файл.
В других операционках могут быть проблемы. Например, на MacOS этот файл может не отображаться: операционка думает, что это скрытый системный файл, и тогда нужно сказать ей «показывай всё». А в Виндоусе вам могут не дать сохранить или переименовать файл с таким названием.
Если же вы будете редактировать или создавать этот файл на удалённом сервере, у вас не будет проблем.
Рецепт: сообщить, что сайт недоступен
Допустим, мы обновляли базу данных Вордпресса и у нас всё сломалось. Страницы не показываются, картинки не грузятся, и сайт работает в целом очень криво. В этом случае лучше отправить посетителей на отдельную страницу, где рассказать им, что случилось с сайтом и когда это починят. В последней строке замените адрес сайта на ваш:
RewriteEngine on
RewriteCond %{REQUEST_URI} !/info.html$
RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90
RewriteRule $ https://site.ru/info.html [R=302,L]
Запрещаем спамить в комментариях
Если у вас сайт на Вордпрессе, туда однажды придут спамеры и начнуть рекламировать всякую дичь в комментариях. Чтобы этого не произошло, можно запретить комментировать это в настройках Вордпресса, а можно на сервере, если доступа к Вордпрессу нет. Site.ru нужно заменить на адрес вашего сайта:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*site.ru.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Ускоряем загрузку с помощью кеша
Если кто-то уже заходил на ваш сайт, то у него уже есть все ваши стили, картинки и скрипты. Чтобы не загружать одно и то же тем, кто уже был, можно настроить кеширование: браузер проверит, есть ли у него в хранилище эти данные, и если есть — возьмёт их оттуда, чтобы было быстрее.
Но есть и минус: иногда браузер может подтянуть из кеша старую картинку или скрипт, хотя вы вчера залили всё новое. Редко, но бывает.
FileETag MTime Size
<ifmodule mod_expires.c> <filesmatch “.(jpg|gif|png|css|js)$”> ExpiresActive on
ExpiresDefault “access plus 1 week”
</filesmatch> </ifmodule>
Настраиваем кодировку
Во всех наших проектах мы прописываем кодировку прямо в HTML-файле. Но есть ещё один способ: указать нужную кодировку в настройках сервера. Тогда, если мы забудем указать её на странице, ничего страшного не произойдёт: сервер сам сообщит браузеру о нужной настройке.
AddDefaultCharset UTF-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]
Запрещаем приходить с определённых сайтов
Если вы не хотите, чтобы к вам приходили посетители с какого-то сайта, например, с сайта любителей аниме или клуба любителей пропатчить KDE под FreeBSD, то вы можете установить это в настройках .htaccess. Сервер проверит, с какого сайта приходит посетитель, и если этот сайт есть в вашем личном чёрном списке — доступ посетителю будет запрещён.
👉 Если человек придёт с другого сайта, но при этом будет всё равно иногда заходить на сайты, которые вам не нравятся, — трюк не сработает.
<IfModule mod_rewrite.c> RewriteEngine on
RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
RewriteRule .* - [F]
</ifModule>
Оптимизируем сайт для SEO
С помощью файла .htaccess можно сделать поисковую оптимизацию сайта — настроить сайт так, чтобы его любили поисковики и приводили к вам из поиска побольше читателей. Но чтобы переходить к настройкам .htaccess, нужно сначала разобраться, что такое SEO и как оно работает. Это и сделаем в следующий раз.