- Типовые перенаправления
- Простое перенаправление
- Перенаправление с использованием mod_rewrite
- Перенаправление на другой домен
- Перенаправление домена без www на домен с www
- Перенаправление домена с www на домен без www
- Перенаправление в подкаталог
- Перенаправление с несуществующего файла
- Перенаправление c http на https
- Перенаправление с https на http
- Перенаправление на http для одной страницы
- Перенаправление на https для одной страницы
- 301 редирект. Шпаргалка по mod_rewrite
- 301 редирект. Популярные шаблоны
- Склейка домена (префикс www)
- Склейка поддомена и папки
- Редирект с одних расширений файлов на другие
- Редирект на другой сайт
- 301 Редирект динамических страниц
- Добавляем слеш в конце адреса
- Комментариев: 1
Типовые перенаправления
Перенаправление (также используются названия редирект, переадресация, форвардинг) — это способ сделать один и тот же документ доступным с других адресов.
Вы можете настроить перенаправление с помощью файла .htaccess по предложенным ниже примерам. Обратите внимание, что кириллические домены в директивах необходимо указывать в punycode .
Простое перенаправление
Чтобы ссылка на одну страницу перенаправляла на открытие другой, добавьте в файл .htaccess следующую строку:
Redirect 301 / http://example.com/index.html
- Redirect 301 — инструкция, сообщающая, что страница перемещена постоянно;
- http://example.com/index.html — адрес страницы, на которую происходит перенаправление.
При использовании 301 редиректа рейтинг сайта в поисковых системах сохраняется.
Аналогичный синтаксис простого редиректа в другом примере:
Redirect permanent / http://example.com/index.html
Перенаправление с использованием mod_rewrite
Перенаправление на другой домен
В примере ниже выполняется редирект с www.old-domain.ru на www.new-domain.ru:
RewriteEngine on
RewriteCond % ^(www\.)?old-domain\.ru$
RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L]
RewriteCond задает условие, при котором происходит выполнение правила, указанного в RewriteRule. Таким образом, при запросе любой страницы www.old-domain.ru или old-domain.ru будет осуществлен переход на адрес www.new-domain.ru.
Перенаправление домена без www на домен с www
Данное перенаправление также может быть выполнено двумя способами. В примерах осуществляется редирект с forum.example.ru на www.forum.example.ru.
Options +FollowSymLinks
RewriteEngine On
RewriteCond % ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://www.forum.example.ru/$1 [R=301,L]
Способ 2 (в данном способе нет необходимости указания домена).
Options +FollowSymLinks
RewriteEngine On
RewriteCond % !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%/$1 [R=301,L]
Перенаправление домена с www на домен без www
В примерах осуществляется перенаправление с www.forum.example.ru на forum.example.ru.
Options +FollowSymLinks
RewriteEngine on
RewriteCond % ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
Options +FollowSymLinks
RewriteEngine on
RewriteCond % !^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
Перенаправление в подкаталог
Перенаправление поддомена forum.example.ru в подкаталог forum:
RewriteEngine on
RewriteBase /
RewriteCond % !^/forum
RewriteCond % ^forum.example.ru$ [NC]
RewriteRule ^index\.php(.*)$ /forum/$1 [L,QSA]
RewriteEngine on
RewriteBase /
RewriteCond % ^forum\.example\.ru$
RewriteCond % !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]
Перенаправление поддомена www .forum.example.ru в подкаталог forum:
RewriteEngine on
RewriteBase /
RewriteCond % ^(www\.)?forum\.example\.ru$
RewriteCond % !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]
Перенаправление с несуществующего файла
Такие перенаправления могут быть полезны, когда необходимо, чтобы тот или иной статический файл (.txt, .jpg, .pdf и многие другие расширения) обрабатывался Apache вместо Nginx.
Перенаправление на PHP-скрипт при обращении к несуществующему файлу robots.txt:
RewriteEngine on
RewriteCond % ^(www\.)?example\.ru$
RewriteCond % ^/robots.txt$
RewriteRule ^(.*)$ /forum/script.php [PT,L]
Перенаправление с несуществующего файла filename.jpg на необходимый статический файл (предварительно нужно переименовать filename.jpg — например, в filename.jpg2):
RewriteEngine on
RewriteCond % ^(www\.)?example\.ru$
RewriteCond % ^/filename.jpg$
RewriteRule ^(.*)$ /directory/filename.jpg2 [PT,L]
Перенаправление c http на https
Вариант 1 (без дополнительных условий).
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
Вариант 2 (перенаправление с http ://example.ru на https ://example.ru).
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteCond % ^example\.ru$
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]
Вариант 3 (перенаправление с http ://example.ru на https ://example.ru с отключением перенаправления для robots.txt).
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteCond % !robots.txt
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]
Вариант 4 (перенаправление с http ://example.ru на https :// www .example.ru).
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteCond % ^example\.ru$
RewriteRule ^(.*)$ https://www.example.ru/$1 [R=301,L]
Вариант 5 (перенаправление с http :// www .forum.example.ru на https ://forum.example.ru).
Options +FollowSymLinks
RewriteEngine On
RewriteCond % ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond % !1
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
Вариант 6 (перенаправление с http ://forum.example.ru на https :// www .forum.example.ru).
Options +FollowSymLinks
RewriteEngine On
RewriteCond % ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://www.forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond % !1
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
Перенаправление с https на http
RewriteEngine On
RewriteBase /
RewriteCond % 1 [NC]
RewriteRule ^(.*)$ http://%/$1 [R=301,L]
Перенаправление на http для одной страницы
RewriteEngine On
RewriteBase /
RewriteCond % 1 [NC]
RewriteCond % ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%/$1 [R=301,L]
Вариант 2 (общее перенаправление на https, с перенаправлением одной страницы на http). Этот способ часто необходим для CMS Bitrix и корректной работы обмена данными с 1С, т.к. 1C не может подключаться по протоколу https.
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteCond % !^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
RewriteCond % 1 [NC]
RewriteCond % ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%/$1 [R=301,L]
Отключение перенаправления на https для страницы bitrix/admin/1c_exchange.php для корректной работы обмена данных с 1C:
RewriteEngine On
RewriteCond % off
RewriteCond % !https
RewriteCond % !^/bitrix/admin/1c_exchange\.php$ [NC]
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
Перенаправление на https для одной страницы
RewriteEngine On
RewriteBase /
RewriteCond % !1
RewriteCond % ^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%/$1 [R=301,L]
Более подробную информацию о перенаправлениях вы можете получить из официальной документации Apache .
301 редирект. Шпаргалка по mod_rewrite
Любой вебмастер не раз сталкивался с необходимостью сделать 301 редирект (при изменение адреса страницы, склейке доменов, удалении дублей). Один из самых простых способов задания 301 редиректа — использовать механизм mod_rewrite, позволяющий переобразовывать URL «на лету».
Данная шпаргалка содержит набор директив, флагов и переменных, подсказки по синтаксису регулярных выражений, используемых mod_rewrite, а так же примеры наиболее популярных шаблонов.
^ | начало строки |
$ | конец строки |
. | любой одиночный символ |
(a|b) | «a» или «b» |
(…) | группа |
[abc] | «a» или «b» или «c» |
[^abc] | не «a», не «b» и не «c» |
\s | Пробел |
a? | 0 или 1 символ «а» |
a* | 0 или больше «а» |
a*? | 0 или больше «а», нежадный |
a+ | 1 или больше «а» |
a+? | 1 или больше «а», нежадный |
a | ровно 3 символа «а» |
a | 3 или больше «а» |
a | от 3 до 6 «а» |
a? | от 3 до 6 «а», нежадный |
!(…) | Префикс «не» (действует если шаблон не подходит) |
NC | Не учитывать регистр |
OR | Комбинировать по принципу «или» |
R[=code] | Редирект, опционально с кодом |
F | Доступ запрещен (посылает 403 заголовок) |
G | «Мертвая» страница (удалена) |
P | Прокси |
L | Последнее правило |
N | Следующий круг |
C | Цепочка |
T=mime-type | Установить MIME-тип |
NS | Пропустить внутренний подзапрос |
NC | Не учитывать регистр |
QSA | Добавить строку запроса |
NE | Не экранировать при выводе |
PT | Пропустить через следующий |
S=x | Пропустить следующие х правил |
E=var:value | Установить переменную окружения |
301 | Перенесен постоянно |
302 | Перенесен временно |
403 | Доступ запрещен |
404 | Страница не найдена |
410 | «Мертвая» страница |
Переменные: HTTP заголовки | Переменные: время |
---|---|
% | % |
% | % |
% | % |
% | % |
% | % |
% | % |
% | % |
% | |
Переменные: запрос | Переменные: сервер |
% | % |
% | % |
% | % |
% | % |
% | % |
% | % |
% | % |
% | |
Переменные: специальные | Директивы |
% | RewriteEngine |
% | RewriteOptions |
% | RewriteLog |
% | RewriteLogLevel |
% | RewriteLock |
RewriteMap | |
RewriteBase | |
RewriteCond | |
RewriteRule |
301 редирект. Популярные шаблоны
Для того чтобы нижеизложенные шаблоны работали нужно перед их использованием прописать в файле .htaccess директивы для модуля mod_rewrite:
Options +FollowSymLinks RewriteEngine On RewriteBase /
Склейка домена (префикс www)
www.example.com и example.com в глазах поискового работа — абсолютно разные сайты, каждый со своими показателями. Для того чтобы не распылять вес, склеиваем эти адреса
Редирект с адреса www на адрес без www
RewriteCond % ^www\.(.*) [NC] RewriteRule ^(.*)$ http: // %1/$1 [R=301,L]
Редирект с адреса без www на адрес с www
RewriteCond % !^www\.(.*) [NC] RewriteRule ^(.*)$ http: //www .%1/$1 [R=301,L]
Зачастую главная страница вашего сайта доступна по нескольким адресам: example.com/ и example.com/index.php или example.com/index.html. Для склейки таких дублей, используем следующий шаблон:
Склейка индексной страницы с корнем сайта
RewriteCond % ^[A-Z]\ /index \.php\ HTTP/ RewriteRule ^index\.php$ http: //example .com/ [R=301,L]
Склейка поддомена и папки
Иногда возникает необходимость сделать 301 редирект с поддомена на папку сайта. Например у вас есть страница category.example.com/page/ и вам нужно склеить ее с дублирующей страницей example.com/category/page/. Прописывем в файле .htaccess поддомена:
Редирект с поддомена на папку основного домена
RewriteCond % ^category\.example\.com [OR] RewriteCond % ^category\.example\.com RewriteRule ^(.*)$ http: //example .com /category/ $1 [L,R=301]
При необходимости наоборот перенаправить с папки на поддомен:
Редирект с папки основного домена на поддомен
RewriteCond % ^example\.com$ [NC] RewriteRule ^category\/(.*)$ http: //category .example.com/$1 [R=301,L]
Редирект с одних расширений файлов на другие
Если вам необходимо сменить расширение файла в адресе (например page.html на page.php) или убрать его совсем:
RewriteRule ^(.*)\.html$ $1.php [R=301,L]
Редирект на другой сайт
При создании зеркала сайта либо переезде на новый домен, для склейки и перенаправления используем следующую конструкцию:
RewriteCond % ^oldsite\.com RewriteRule ^(.*)$ http: //newsite .com/$1 [R=301,L]
Все страницы домена oldsite.com будут перенаправлены на соответствующие страницы newsite.com.
301 Редирект динамических страниц
При модернизации динамического сайта и создании ЧПУ-адресов часто возникает необходимость перенаправить старые страницы с параметрами ID на новые с ЧПУ. Например, чтобы переадресовать страницу вида http://example.com/page.php?id=13 на новую страницу http://example.com/new-url/, используется следующая конструкция:
RewriteCond % ^ ^ /page .php$ http: //example .com /new-url/ [L,R=301]
Добавляем слеш в конце адреса
Если у вас на сайте реализованы ЧПУ адреса тем или иным способом, то вероятно ваши ссылки могут работать либо со «/» на конце адреса либо без него одинаково. Добавим однозначности и добавим слеш ко всем адресам.
RewriteCond % !-f RewriteCond % !-d RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
Комментариев: 1
- 2019-02-01 в 16:47:53 | Сержик Помогите вырезать часть url в адресе. Сейчас ссылка такого вида: http://site.ru/catalog/pages/pages.php?cat_id=3&page_id=125 Нужно сделать такой вид: http://site.ru/catalog/pages/pages.php?page_id=125 Как правильно удалить: cat_id=3&