Файл .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 и как оно работает. Это и сделаем в следующий раз.