В данном материале будут рассмотрены основные команды и правила настройки файла .htaccess. Следует учитывать, что правила нужно размещать после двух команд:
Options +FollowSymLinks
RewriteEngine On
-
Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.
Если требуется написать комментарий, то необходимо перед ним поставить #, тогда всё, что написано после этого символа не будет учитываться
# комментарий
Redirect 301 /contacts.html https://site.ru/ contacts
*Новый адрес необходимо указывать полностью
RewriteRule ^dir /dir-new/$1 [R=301,L]
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Для HTTPS-версии:
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
Например, есть страница вида: http://www.site.ru/catalog/brand-is-24f/?search=APIEU%20FRESH%20MATE%20MASK тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^search=APIEU%20FRESH%20MATE%20MASK$
RewriteRule ^catalog/brand-is-24f/$ /catalog/new/? [R=301,L]
Если адрес имеет следующий вид: http://site.ru/?brand то для перенаправления подойдет последовательность строчек:
RewriteCond %{QUERY_STRING} ^brand$
RewriteRule ^$ /? [R=301,L]
Если требуется настроить переадресацию только для адреса https://site.ru/cat/, но при этом чтобы страница https://www.site.ru/cat/index.php?IBLOCK_ID=15 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
RewriteRule ^cat/$ https://site.ru/new/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RedirectMatch 301 (.*)\.html$ http://www.site.ru$1.php
RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Синтаксис для регулярных выражений
. — точка, способна заменить только один любой символ.
() — группировка;
! — символ отрицания;
# — старт текстового комментария в файле.
\ — «экранирующий» слеш, после которого другой символ теряет статут "специального" и становится обычным.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. ".*" — найдёт все подстроки между кавычками.
^ — указание начала строки.
$ — символ конца строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
[0-9] — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
Для указания дополнительных задач и опций используются флаги. Их перечисляют в квадратных скобках через запятую:
- L — флаг Last, указывающий приостановку формирования URL-адреса, так что после него строка считается окончательной;
- NC — флаг NoCase, за счет которого отключается проверка регистра символов, если правило срабатывает;
- R — флаг Redirect необходим для остановки изменения URL-адреса, он возвращает прежний результат. Обычно используется значение R=301, но встречаются и другие вариации для временных перенаправлений (302, MOVED TEMPORARY).