Настройка htaccess, файла дополнительной конфигурации сервера, очень важна при работе с сайтом. Часто возникают вопросы: "что такое правильный htaccess?" или "как сделать 301 редирект htaccess?". Здесь мы разберемся в элементарных вопросах про работу с файлом конфигурации .htaccess, для чего нужен htaccess, 301 редирект и т.д.
Что такое .htaccess и для чего нужен?
Для начала стоит сказать пару слов о том, что такое веб-сервер, и как устроена его работа. Веб-сервер — (условно) это компьютер, на котором установленное специальное ПО, которое позволяет запускать и настраивать ваш сайт или веб-приложение для публикации в интернете. Короче говоря, с веб-сервером ваш сайт будет доступен по протоколам http и https. Самыми распространенными ПО для веб-серверов являются Apache и Nginx. Они бесплатные, и любой может поставить их у себя на компьютере и запустить.
Htaccess где находится?
Расположен этот файл обычно в корневом каталоге вашего сайта. Т.е. та папка, в которой лежит сайт. Если его там нет, создайте его, или задайте вопрос в техподдержку хостинга о том, какие правила применяются конкретно у них для изменений конфигурации сервера.
Исправления в него вносятся как в любой текстовый документ. Если вы уже вносили когда-либо изменения в файлы прямо в файлах на хостинге, то у вас не должно возникнуть с этим проблем.
Для чего нужен htaccess?
Настройка веб-сервера производится через файлы конфигурации, которые хранятся в виде текстовых файлов в папках среди файлов веб-сервера. Например, основными для настройки файлами являются httpd.conf или apache.conf, в зависимости от настройки ОС.
Как вы понимаете, доступ к файлу конфигурации есть далеко не у всех пользователей веб-сервера. А зачастую, если мы говорим про виртуальный сервер, то и вообще ограничен только администраторами хостинга. Поэтому придумано было для внесения локальных изменений для каждого ресурса (сайта) использовать файл .htaccess.
Файл .htaccess позволяет вносить изменения в некоторые настройки сервера, но не глобально, а локально для вашего конкретного сайта. Применяется он преимущественно для виртуальных серверов, где расположено не 1, а множество разных ресурсов. Данное имя .htaccess принято условно во всем мире, но не является обязательным. Имя такого конфиг-файла может быть и .config или любое другое.
Самые полезные настройки htaccess
Рассмотрим базовые настройки для файла конфигурации веб-сервера Apache. Для Ningx это может не работать. Следует уточнять у хостинга, что за веб-сервер они вам предоставляют.
301 редирект htaccess
Самый частый вопрос при работе с веб-сервером — как прописать 301 редирект в htaccess?
Помните, что настройки, связанные с редиректом пишутся тут:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
...
</IfModule>
Поэтому, либо найдите эти строчки у себя, либо же сделайте их сами. Итак, запись для 301 редиректа (это безопасный перманентный редирект со страницы на страницу):
Redirect 301 /catalog/old-page/ /catalog/new-page/
Если мы хотим направить весь каталог на сайте в новое место:
Redirect 301 /old-catalog/ /new-catalog/
— в этом случае вы перенаправляете и все внутренние страницы каталога туда же. Не забудьте, что названия страниц при этом остаются старые.
Отметим еще один важный момент, связанный с переносом каталогов. Если вы переносите не только общую страницу каталога "/catalog/", но и подстраницы вручную, то вам следует помнить о том, что файл .htaccess читается сверху вниз!
То есть, если вы сделали редирект так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
Redirect 301 /old-catalog/ /new-catalog/
Redirect 301 /old-catalog/old-page-1 /new-catalog/new-page-2
</IfModule>
то при открытии страницы https://mysite.ru/old-catalog/old-page-1, вы получите ошибку, что страница недоступна. Это связано с тем, что он сначала произведет перенаправление на страницу /old-catalog/, так как она стоит выше в конфиг-файле. И потом при попытке открыть подстраницу возникнет ошибка. Это часто бывает, когда мы меняем имена своим страницам на новые.
Правильно в данном случае будет делать запись от самой последней страницы и выше до каталога. Тогда все будет перенаправлять верно. Вот так:
Redirect 301 /old-catalog/old-page-1 /new-catalog/new-page-2
Redirect 301 /old-catalog/ /new-catalog/
htaccess редирект на https
Редирект с http на https через htaccess редко сейчас является необходимостью на современных хостингах. Обычно хостинг предоставляет возможность делать это автоматически или дает такую функцию. Пример:
Но, если подобная функция нужна, то делается это с помощью RewriteCond:
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
или
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Частая проблема, это перевод с www на без www домен. Если сайт отвечает на оба адреса, то поисковая система считает, что это разные сайты. Часто это приводит к задвоению контента в поисковых системах. Такой командой мы избавляемся от этой проблемы:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Редирект с домена на домен htaccess
Иногда требуется сделать редирект со старого домена или просто перенести часть страниц на другой сайт. Тогда для полезных страниц следует сделать 301 редирект htaccess на другой домен:
Redirect 301 /old-page/ https://mynewsite.ru/page-1/
Redirect 301 / https://mynewsite.ru/
И так далее...
Еще один вариант для редиректа с домена на домен:
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.newsite.ru/$1 [R=301,L]
Запретить доступ к директории
Запретить доступ к директории сайта через htaccess, находящийся в корне сайта проблематично. Для этого нужно создать файл .htaccess внутри этой директории с текстом:
Deny from all
ErrorDocument 403 "Данный раздел находится в разработке"
В этом случае пользователь, вошедший туда, будет видеть эту надпись на белом экране.
Если у вас CMS (Битрикс, Wordpress и т.д.), то просто создайте папку с точным названием этого раздела и создайте htaccess там. Данный способ отлично подходит для разделов второго уровня (вида "site.ru/catalog/"). Во всех остальных случаях советуем вам использовать внутренние средства самой CMS. В 99% случаев там можно просто взять и выключить любой каталог и страницы в нем.
Запретить доступ к файлу
Запретить доступ к конкретному файлу:
<Files "myfile.php">
Deny From All
</Files>
Запретить доступ к разным типам файлов:
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Htaccess и доступ по ip
Есть в конфигурации htaccess deny from all и deny from "ip". Команда Deny from 192.168.0.1 запретит всем пользователям с этого ip-адреса заходить на сайт.
Order allow,deny
Allow from all
Deny from 192.168.0.1
Чтобы запретить всем и открыть доступ только для определенного IP:
Order deny,allow
Deny from all
Allow from 192.168.0.1
Для блокировки ip-адресов по маске просто напишите:
Deny from 192.168.
Поправить редирект на index.php
В случае, когда на сайте открываются страницы index.php, нам следует исправить это, чтобы не возникало дублей. Для редиректа с index.php на основной домен:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP
RewriteRule ^index.php$ https://site.ru [R=301,L]
Помните, что для работы этих настроек требуется в первую очередь Apache или доступ к его конфигурации на сервере. Иначе вам придется спрашивать у техподдержки хостинга, как вам поступать в той или иной ситуации. Не все команды здесь одинаково полезны. Бывает и так, что и хорошие хостинг-провайдеры частично открывают настройки для сервера, закрывая большинство полезных из них. Для этого в первую очередь советуем вам написать в техподдержку свои вопросы, если что-то не получается. Многие проблемы, описанные выше, решаются плагинами в Wordpress, к примеру.
Удачи вам в постижении .htaccess!