ЯК ЗРОБИТИ 301-РЕДИРЕКТ У ФАЙЛІ .HTACCESS? ПРИКЛАДИ ТА ПРАВИЛА НАЛАШТУВАННЯ

ЩО ТАКЕ 301 РЕДИРЕКТ?

Загальне визначення
Код стану HTTP 301 або Moved Permanently («Переміщено назавжди») — стандартний код відповіді сервера, який можна отримати, якщо запитана URL-адреса сайту була назавжди перенесена в нове місце розташування.

Вступ. Правила наведено для сервера Apache. У правилах: %{QUERY_STRING} — означає фрагмент URL-адреси після знака запитання (завдання значень CGI-параметрів). Спрацювання того чи іншого правила для редиректу визначається тим, чи попадає URL-адреса сторінки під це правило чи ні. Про значення тих чи інших позначень (^, $, NC тощо).

Перевірте код відповіді. Швидка та безкоштовна перевірка кодів відповіді для списку URL у режимі онлайн реалізована в рамках комплексу інструментів , передбачене зручне кодування кольорів та завантаження URL файлом.

НАЙБІЛЬШ ВИКОРИСТОВУВАНІ ПРАВИЛА

Нижче наведені правила налаштування файлу .htaccess для 301-редиректа. Краще розміщувати всі правила після двох рядків:

Options +FollowSymLinks
RewriteEngine On

Коментар у файлі позначається символом ґрати «#» на початку рядка 

# Текстовий коментар, цей рядок не буде оброблятися.

301-редирект з домену без WWW на домен з WWW префіксом 

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

З домену з WWW префіксом на без

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

Для HTTPS-версії:

RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://pixelplus.ua/$1 [R=301,L]

Стандартна переадресація з однієї статичної сторінки на іншу

Redirect 301 /was.php http://www.site.ua/new.php

При цьому нову адресу вказувати необхідно повністю з http та доменним ім’ям.У ряді випадків корисна переадресація через RewriteRule 

RewriteRule ^dir /dir-new/$1 [R=301,L]

301-редирект для сторінки з параметрами GET 

Скажімо, адреса сторінки має вигляд: http://www.site.ua/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тоді для налаштування 301 переадресації на нову адресу, необхідно використовувати таке правило:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC]
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]

Якщо один (або декілька) GET параметрів не заданий(и) або може мати довільне значення (у нашому прикладі це SECTION_ID ), можна використовувати наступний код:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC]
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]

301-редирект зі сторінки без заданого параметра в корінь

Якщо адреса має такий вигляд: http://www.site.ua/?abc то для перенаправлення підійде послідовність рядків:

RewriteCond %{QUERY_STRING} ^abc$ [NC]
RewriteRule ^$ /? [R=301,L]

301-редирект для конкретного файлу, а не цілої папки 

Якщо потрібно налаштувати переадресацію тільки для адреси http://www.site.ua/dir/ , але при цьому щоб сторінка http://www.site.ua/dir/index.php?IBLOCK_ID=1 відкривалася за старою адресою, необхідно використовувати спецсимвол $ у правилі.

RewriteRule ^dir/$ http://www.site.ua/new-dir/ [R=301,L]

Як бути з доменами у зоні UA?

Для доменів у зоні UA діють ті самі правила, але тільки всі кирилиці необхідно замінити на альтернативний код (він на латиниці). 

RewriteCond %{HTTP_HOST} ^old-site\.ua$ [NC]
RewriteRule ^(.*)$ http://www.site.ua/$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.ua/$1 [R=301,L]

301-редирект з домену на папку на іншому домені 

RewriteCond %{HTTP_HOST} ^si-te\.ua$ [NC]
RewriteRule ^(.*)$ http://www.site.ua/si-te/ [R=301,L]

Редирект з усіх файлів домену, крім папки адміністратора bitrix 

RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ua/new/ [L,R=301]

Редирування всіх файлів у папці на заданий файл 

RewriteRule ^dir(.*)$ /new-file.php [L,R=301]

Редирект файлів із заданої папки крім певного файлу 

RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
RewriteRule ^dir(.*)$ /all.php [L,R=301]

Зміна сторінок з html розширення на php розширення 

RedirectMatch 301 (.*)\.html$ http://www.new-site.ua$1.php

Перенесення картинок / зображень з папки /img/ на піддомен 

RewriteRule ^img/(.+)\.jpg$ http://img.domain.ua/$1.jpg [R=301,L]

Завдання типу індексної сторінки (php, html, htm та інші) 

Вказується порядок завантаження типів індексного файлу, які у корені каталогу.

DirectoryIndex index.html index.php index.htm index.shtml

Редирект з індексної сторінки php на саму папку (корінь) 

RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ua/ [R=301,L]

Для всіх індексних сторінок на сайті:
RewriteRule ^(.*)index\.php$ http://www.site.ua/$1 [R=301,L]

Редирект із піддомену на основний домен другого рівня 

RewriteCond %{HTTP_HOST} ^test.site.ua$ [NC] RewriteRule ^(.*)$ http://site.ua%{REQUEST_URI} [R=301,NC,L,QSA] 

Редирект для заданого файлу в різних директоріях (папках) 

RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]

Код дозволяє поставити 301-редирект з усіх папок виду http://site.ua/***/uniqe-file.html на один файл у корені /unique-file.html. Буває корисним при переробці сайту та зміні посилань.Якщо потрібно створити ЧПУ-копію будь-якої динамічної сторінки, це можна також реалізувати за допомогою .htaccess. 

RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]

Код дозволяє створити копію сторінки з відносною адресою /studio/news/detail.php?ID=230354&PAGEN_2=11 на адресу /testovyi/test/

301-редирект з HTTPS-версії на HTTP 

RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

Дозволяє усунути наявність дублів URL з HTTPS в індексі пошукових систем.

Перенесення сайту на версію з HTTPS (для всіх сторінок) 

RewriteCond %{SERVER_PORT} ^80$ [OR] RewriteCond %{HTTP} =on RewriteRule ^(.*)$ https://domain.ua/$1 [R=301,L] 

Налаштування 403 коду відповіді сервера для реф-спаму (301-редирект для спаму за REFERER) для списку ресурсів 

RewriteCond %{HTTP_REFERER} ref-spam-site.ua [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ua [NC]
RewriteRule .* - [F]

Налаштування дозволяє відхилити спамний реферальний трафік із ряду ресурсів за заголовком HTTP_REFERER.Вказати шлях до файлу 404 помилки за допомогою .htaccess 

Увага, важливо, щоб код відповіді сервера для 404 помилки був саме 404. Шлях до файлу вказується за допомогою наступного рядка:

ErrorDocument 404 /404-for-me.php

! Всі правила виконуються в прямому порядку їхнього прямування у файлі .htaccess і правило, написане пізніше, і буде виконуватися пізніше.

! Для сайтів, на яких використовується не сервер Apache, аналогічні 301-редиректи легко налаштовуються за допомогою PHP.

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.site.ua/dir/");
exit();
?>

! Оптимально налаштовувати всі редиректи відразу на кінцеву сторінку (без проміжних перенаправлень, в один крок) це покращує їхнє сприйняття з боку пошукових систем та користувачів.Якщо потрібно налаштувати редирект лише для деяких USER_AGENT’ів, а не для всіх користувачів 

RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ windows\phone) [NC] RewriteRule (.*) http://mobile.site.ua/ [L, R=301] 

Якщо потрібно налаштувати редирект для всіх пошукових роботів (представлений список USER_AGENT’ів) 

RewriteCond %{HTTP_USER_AGENT} (accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot|gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer jigsaw | webalta | yahoofeedseeker | yahoo! \ slurp | mmcrawler | yandexbot | yandeximages | yandexvideo | yandexmedia
| no-search.site.ua/ [L,R=301]

Декілька простих прикладів 

Переадресація з www.site.ua/component/content/?view=featured на www.site.ua/
RewriteCond %{QUERY_STRING} ^view=featured$ [NC]
RewriteRule ^component/content/$ /? [R=301,L]
Переадресація з www.site.ua/index.php?idc=4&marea=6 на www.site.ua/
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
RewriteRule ^index\.php$ /? [R=301,L]

Синтаксис для регулярних виразів

. — Крапка замінює довільний символ.
[abc] – позначає перелік символів, що збігаються з літерами a, b або с.
[^abc] — перелік символів, які не входять до вказаного діапазону. Збігається з будь-яким символом, окрім a, b, або с.
* – означає, що попередній символ може повторюватися (0 або більше разів).
[abc]* — команда знайде символи, що йдуть поспіль, із заданого набору.
[^abc]* — з точністю навпаки.

.* — замінює будь-який набір символів. “. *” – Знайде всі підрядки між лапками.
^ – Початок рядка (у тому випадку, якщо використовується на початку виразу).
$ – Позначає кінець рядка.

\w – буква, цифра або підкреслення _.
\d – замінює будь-яку цифру.
\D – замінює будь-який символ, але не цифру.
[0-9] – замінює будь-яку цифру.
[az] – будь-яка буква від a до z (весь латинський набір символів) у нижньому регістрі.
[AZ] – будь-яка буква від A до Z у верхньому регістрі.
[a-zA-Z] – будь-яка буква від a до Z у будь-якому регістрі.
[aZ] – те саме.
Забираємо всі GET-параметри після знака питання (?) 

RewriteRule (.*) $1? [R=301,L]
Розташовувати після: RewriteBase /

ПАМ’ЯТКА ЗА СИМВОЛАМИ ТА ПОЗНАЧЕННЯМИ, ЩО ВИКОРИСТОВУЮТЬСЯ.

Рядок RewriteCond — умова виконання правила RewriteRule. Якщо умова виконується, спрацьовує редирект. Правила можуть задаватися за допомогою регулярних виразів.

Спецсимволи, що використовуються у правилах та їх значення.

  • ^ – Спецсимвол початку рядка;
  • $ – Спецсимвол кінця рядка;
  • ! – Спецсимвол заперечення;
  • . – Точка, замінює будь-який символ, але тільки один;
  • () – Угруповання;
  • \ — «екрануючий» слєш, наступний символ після нього вважається звичайним, а не спецсимволом;
  • # — Початок текстового коментаря у файлі.

Модифікатори використовуються після звичайних спецсимволів або їх груп і дозволяють розширити можливості шаблонів для спрацьовування правил.

  • ? символ повторюється 0 або 1 раз.
  • + – Повторюється від 1 до 65536 разів.
  • * – повторюється від 0 до 65 536 разів.

Прапори, задають дод. опції для використовуваного правила. Перераховуються в квадратних дужках через кому, скажімо [NC] або [R=301,L].

  • NC — прапор NoCase, що вимикає перевірку регістру символів під час спрацьовування правила.
  • R – прапор Redirect, здійснює процес зупинення зміни URL-адреси і повертає результат. Найчастіше використовується значення R=301, але можливі інші для тимчасових перенаправлень (302, MOVED TEMPORARY).
  • L – прапор Last, зупиняє формування URL-адреси і рядок вважається остаточним.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

Вам також сподобається...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *