Розробка, підтримка, SEO, просування, соцмережі та реклама сайтів ☣
Кабінет клієнта
Зареєструватись Забули пароль?
Розробка та створення сайтів » Блог » seo » Приклади налаштуваннь переадресації в htaccess

Приклади налаштуваннь переадресації в htaccess

Створюю і просуваю комерційні сайти та інтернет-магазини з 2008 року. 18-11-2016, 16:59 1 501 0
Приклади налаштуваннь переадресації в htaccess

Конкретні приклади установки 301 переадресації сторінок через htaccess!

Поради
  • Розташовуйте переадресації сторінок у файлі від приватних до більш глобальних (зверху вниз). Наприклад: проста переадресація двох сторінок стоїть вище, ніж глобальне правило редиректів з www без www.
  • Уникайте двох, трьох і т. д. послідовних редиректів. Правила повинні бути налаштовані так, що при виникненні редіректу він повинен перенаправляти користувача (робота) лише один (!) раз. Кожне зайве переадресація – це секунди дорогоцінного часу віддачі сторінки, це навантаження на сервер, це нечіткі команди для пошукових роботів.
  • Не забувайте, що багато браузери кешируют (запам'ятовують редиректи), тому перевіряти переадресації краще на сайті   http://www.bertal.ru.
Правила переадресацій 1. 301 редирект с одной страницы на другую

Самый простой вариант

1
Redirect 301 /test-1/ http://site.ru/test-2/

Более подробный

1
2
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]
2. 301 редирект с www на без www (главное зеркало – домен без www)
1
2
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
3. 301 редирект с без www на www (главное зеркало – домен с www)
1
2
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
4. 301 редирект со страниц со слешем на без слеша (весь сайт)
1
2
3
4
5
6
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
5. 301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)
1
2
3
4
5
6
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
6. Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
7. Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
8. Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]
9. Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$ 
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
 
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]
10. 301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru
1
2
3
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]
11. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

Пример: типа site.ru/index.php?n=1 на site.ru/?n=1

1
2
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://site.ru/ [R=301,L]
12. 301 редирект для index.php в Joomla (массовая склейка)
1
2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://dikom-neva.ru/$1 [R=301,L]
13. 301 редирект url с GET параметрами (динамический URL) на статический

1 вариант (простой адрес с GET параметром)

1
2
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]

2 вариант (со страницы и GET параметром)

1
2
3
RewriteCond %{REQUEST_URI} /test/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]
14. Все страницы одного домена на главную страницу другого домена
1
2
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]
15. Каждая страница одного домена на такой же адрес другого url
1
2
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
16. Редирект с протокола http на https.
1
2
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Если возникает циклический редирект, то воспользуйтесь этим вариантом:

1
2
3
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
17. Редирект с протокола https на http.

Обратный редирект, если перестали использовать SSL сертификат.

1
2
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [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] — то же самое.

Убираем все GET-параметры после знака вопроса (?) #

RewriteRule (.*) $1? [R=301,L]
Располагать после: RewriteBase /

 

Памятка по используемым символам и обозначениям

Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.

Спецсимволы, используемые в правилах и их значения.

  • ^ — спецсимвол начала строки;
  • $ — спецсимвол конца строки;
  • ! — спецсимвол отрицания;
  • . — точка, заменяет любой символ, но только один;
  • () — группировка;
  • \ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

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

  • ? — символ повторяется 0 или 1 раз.
  • + — повторяется от 1 до 65536 раз.
  • * — повторяется от 0 до 65536 раз.

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

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

 Пояснення до переадресації:

.htaccess действует только на каталог где он расположен и на его дочерние каталоги):
RewriteEngine on (включаем процесс преобразования ссылок)
RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*)/([0-9]+).html$ index.php?auto=$1&model=$2&state=$3&page=$4 [L]

Давайте подробней разберемся, что здесь написано:
^ Начало строки;
([A-Za-z0-9-]+) Скобки создают переменную, которую подставляем в динамическую ссылку $1. То есть
Переменная $1 = ([A-Za-z0-9-]+)
Переменная $2 = ([^/]+)
Переменная $3 = (.*)
Переменная $4 = ([0-9]+)
В скобках [A-Za-z0-9-] класс допустимых символов. В данном случае допустимыми символами являются A B C D…Z a b c…z 0 1 2 3…9 – Если мы хотим добавить символы, например, ? ; : то получим следующее [A-Za-z0-9-?;:] то есть просто дописали их.
+ означает что мы добавляем еще один символ для подстановки.
Выражение ([^/]+) означает любой символ кроме(^ означает кроме) слеша назад. + означает добавить еще символ.
Выражение (.*) Точка означает любой единичный символ, * означает как и плюс – добавить еще символ.
Выражение ([0-9]+) думаю, тут понятно.
.html – означает что статическая строка оканчивается на .html
Слеши / означают слеши в статической ссылке.

 

Следует отметить, что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! То есть, на сайте мы пишем статические ссылки, а мод рерайт преобразовывает статическую ссылку с сайта на динамическую. То есть представленную выше ссылку мы должны записать на сайте в виде статической:
site.ru/catalog/ BMW/X5/NEW/5.html
А модуль RewriteRule эту ссылку преобразовывает в динамическую по правилу записанному в .htaccess и выдает сайту:

На выходе получается ссылка: site.ru/catalog/index.php?auto=BMW&model=X5&state=NEW&page=5
Которая и понятно нашим php скриптам и страницам сайта.
Так же к выше изложенному правилу преобразования следует добавить правила для ссылки без переменной номера страницы page, а так же возможных вариантов с отсутствием переменных.
RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*).html$ index.php?auto=$1&model=$2&state=$3 [L]
RewriteRule ^([A-Za-z0-9-]+)/([^/]+).html$ index.php?auto=$1&model=$2 [L]
RewriteRule ^([A-Za-z0-9-]+).html$ index.php?auto=$1 [L]
Ниже приведу возможные обозначения и символы используемые в модуле MOD_REWRITE:
. Любой одиночный символ. Если нам в круглых скобках нужна именно точка а не любой одиночный символ ее нужно экранировать . Обратный слеш экранирует какой либо символ [ ] ( ) ? > и т.п. и передает его истинное значение.
[chars] Класс симвлолв: Один из символов например [A-Za-z0-9] {2,5}- фигурные скобки означают диапозон количества символов, в данном случае допускается от 2 до 5 символов.
[^chars] Класс симвлолв: Ни один из символов. [^fg57] – символы f g 5 7 запрещены.
text1|text2 Альтернатива: text1 или text2. например [a|b|c] означает или a или b или c
Кванторы (символы для обозначения количественных отношений):
? 0 или 1 из предшествующего текста Означает либо есть символ или какое-то значение символов или их может не быть.
* 0 или N из предшествующего текста (N > 0)
+ 1 или N из предшествующего текста (N > 1)
макрос "$1" обозначает ту часть исходного пути, которая расположена внутри первой пары скобок "RewriteRule ^(.*)....." , $2 – внутри второй пары и так далее.
Маркеры:
^ Маркер начала строки
$ Маркер конца строки

Інше про переадресацію - дивитись

 
 

Розробка сайтів | Створення сайтів

Коментарі

⤹ Залишити свій коментар ⤸

  • Натисніть на зображення, щоб оновити код, якщо він нерозбірливий
Останнє на сайті
  • seo

    Українські каталоги для реєстрації сайту

    coments/13 vievs/ 1
  • faq

    Які існують російські домени?

    coments/14 vievs/ 0
  • seo

    Українська двигун для сайту - Ardilla-CMS

    coments/104 vievs/ 0
Останнє в магазині
Картинка в meta з додаткового поля Картинка в meta з додаткового поля / Платні модулі DLE
Коментарі
Популярне на сайті

Для усіх любителів Анекдотів українською існує чудовий сайт з безліччю приколів, смішних історій та відео: Анекдоти

Тарифні плани

Потужний старт Стандартний запуск сайту від $400
  • - ♜ -
  • В стартовий тарифний план входить:

  • Розробка та налаштування сайту
  • Семантичне ядро
  • Оптимізація швидкості
  • Наповнення до SEO 5 сторінок
  • Ліцензія двигунчика DLE
Просунутий SEO оптимізований сайт від $700
  • - ♚ -
  • В SEO тарифний план входить:

  • Створення та налаштування сайту
  • Семантичне ядро
  • Оптимізація швидкості
  • Наповнення до SEO 10 сторінок
  • Ліцензія двигунчика DLE
  • 5 силок + перелінковка
Імперський винущувач конкурентів від $999
  • - ♛ -
  • В імперський тарифний план входить:

  • Розробка сайту
  • Наповнення до SEO 20 сторінок
  • Повна оптимізація
  • Ліцензія двигунчика DLE
  • МОЄ НАТХНЕННЯ та ДОСВІД!
/* soc-knopki */