редирект с одной папки на другую
❓Как сделать 301 редирект папки
Сделать переадресацию папки необходимо в нескольких случаях – если вы перемещаете её в пределах сайта для сокращения url и оптимизации структуры, а также для редиректа 301 folder на поддомен. Два этих варианта я и рассмотрю.
Редирект в пределах сайта
В первом случае сокращается адрес folder, поэтому структура становится более понятна ботам. Также можно собрать в одном месте материалы одной темы, что хорошо для оптимизации сайта. Например, есть папка:
И нужно, чтобы она открывалась по адресу:
При этом важно сохранить урл, изменив только папку корня, то есть, все страницы за folder-storage-directory должны открываться после folder-shipping.
Проще говоря, есть адрес:
А надо чтобы она открывалась по адресу:
Поможет в этом код:
В результате адрес сокращается и структура сайта более понятна ботам. Также плюшка оптимизации.
Редирект папки на поддомен
Иногда требуется переадресация папки на поддомен. Такая неприхотливая нужда возникает, если надо сделать 301 не всего сайта, а только одной (двух, трёх) папки. Например, тематика вашего основного сайта слишком распылилась, и вы хотите разбросать её по поддоменам, собрав на каждом из них материалы одной темы.
Предположим, есть папка:
И надо сделать редирект 301 на:
Поможет в этом код в htaccess:
RewriteRule ^ru/(.*)$ http://ru.site.ru/$1 [R=301,L]
Так можно перенести с основного сайта на поддомены всё ненужное, оставив на нём только важный контент одной направленности. Например, ранее вы создали сайт об автомобилях, куда впихивали всё об авто. Теперь вы хотите, чтобы на отдельных поддоменах была информация о кузове, ходовой части, тюнинге и т д. С помощью этого кода вопрос решается и пользователю не придётся копаться в винегрете, пытаясь найти нужную информацию.
Для использования кодов просто замените в нём домен и папки на свои директории и вставьте в htaccess. Делаете редирект с одинаковым успехом на Joomla и других движках.
Код состояния HTTP 301 или Moved Permanently («Перемещено навсегда») — стандартный код ответа сервера, который может быть получен, если запрошенный URL-адрес сайта был навсегда перенесен в новое месторасположение.
Проверка кода ответа. Быстрая и бесплатная проверка кодов ответа для списка URL в режиме онлайн реализована в рамках комплекса инструментов «Пиксель Тулс», предусмотрено удобное цветовое кодирование и загрузка URL файлом.
Анализ проведён с помощью инструментов в сервисе Пиксель Тулс.
Options +FollowSymLinks
RewriteEngine On
# Текстовый комментарий, данная строчка не будет обрабатываться.
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://pixelplus.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
RewriteRule ^dir /dir-new/$1 [R=301,L]
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если адрес имеет следующий вид: http://www.site.ru/?abc то для перенаправления подойдет последовательность строчек:
RewriteCond %
RewriteRule ^$ /? [R=301,L]
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/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]
RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php
RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://site.ru%
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
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/
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
RewriteCond %
RewriteRule (.*) http://mobile.site.ru/ [L,R=301]
RewriteCond %
RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
RewriteCond %
RewriteRule ^component/content/$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
RewriteCond %
RewriteRule ^index\.php$ /? [R=301,L]
. — Точка заменяет произвольный символ.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. «.*» — найдёт все подстроки между кавычками.
^ — начало строки (в том случае, если используется в начале выражения).
$ — обозначает конец строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
3 — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
Памятка по используемым символам и обозначениям
Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
Будьте, пожалуйста, внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» Windows, а специальные текстовые редакторы, например Notepad++.
Options +FollowSymLinks
RewriteEngine On
Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).
Правила настройки Redirect, RewriteRule и RewriteCond
Директива Redirect в htaccess
Redirect [status] /откуда http://куда_полный_адрес
Redirect устанавливает прямой редирект с одной страницы на другую.
В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.
Важно, чтобы страница «откуда» была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша “/” (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).
Redirect 301 /oldpage.php https://htaccess.ru/newpage.php
Можно также писать по другому
RedirectPermanent 301 /oldpage.php https://htaccess.ru/newpage.php или
Redirect permanent 301 /oldpage.php https://htaccess.ru/newpage.php
Директива RewriteRule
Директива RewriteRule устанавливает правила перехода. Синтаксис следующий:
RewriteRule Шаблон Подстановка [коды]
Директива RewriteCond
Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.
RewriteCond Сравниваемая_Строка Условие
Например, этими условиями могут быть браузер пользователя, IP-адрес, заголовок и т.д.
Директива RedirectMatch
Директива RedirectMatch в htaccess аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.
RedirectMatch [status] Откуда Куда
Примеры настройки 301 редиректов в htaccess
Options +FollowSymLinks
RewriteEngine On
Комментарий в файле htaccess обозначается символом решётка «#» в начале строки
# Текстовый комментарий, данная строчка не будет обрабатываться.
301-редирект с домена без WWW на домен с WWW префиксом
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
С домена с WWW префиксом на без
RewriteCond %
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Для HTTPS-версии:
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
Стандартный 301-редирект с одной статической страницы на другую
Redirect 301 /was.php http://www.site.ru/new.php
При этом в файле htaccess, новый адрес указывать необходимо полностью с http и доменным именем.
В ряде случаев полезен редирект через RewriteRule
RewriteRule ^dir /dir-new/$1 [R=301,L]
Настройка 301-редирект для страницы с GET параметрами
Скажем, адрес страницы имеет вид: http://www.htaccess.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда в htaccess для настройки 301 редиректа на новый адрес, необходимо использовать следующее правило:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Убираем все GET-параметры после знака вопроса (?)
Располагать после: RewriteBase /
301-редирект со страницы без заданного параметра в корень
Если адрес имеет следующий вид: http://www.htaccess.ru/?abc то для редиректа подойдет последовательность строчек:
RewriteCond %
RewriteRule ^$ /? [R=301,L]
301-редирект для конкретного файла, а не целой папки
RewriteRule ^dir/$ http://www.htaccess.ru/new-dir/ [R=301,L]
Как быть с доменами в зоне РФ?
301-редирект с домена на домен
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Настройка редиректа на папки со слешем в конце /
Настройка редиректа на папки без слеша (убираем слеш в конце)
301-редирект с домена на папку на другом домене
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
Редирект со всех файлов домена, кроме папки администратора bitrix
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/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.ru$1.php
Перенос картинок / изображений из папки /img/ на поддомен
RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Задание типа индексной страницы (php, html, htm и другие)
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
Редирект с индексной страницы php на саму папку (корень)
RewriteCond %
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
Редирект с поддомена на основной домен второго уровня
RewriteCond %
RewriteRule ^(.*)$ http://site.ru%
Редирект для заданного файла в различных директориях (папках)
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://htaccess.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
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
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
Перенос сайта на версию с HTTPS (для всех страниц)
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://htaccess.ru/$1 [R=301,L]
Настройка 403 кода ответа сервера для реф-спама (301-редирект для спама по REFERER) для списка ресурсов
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: http://www.htaccess.ru/dir/»);
exit();
?>
! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
Если требуется настроить редирект только для некоторых USER_AGENT’ов, а не для всех пользователей
RewriteCond %
RewriteRule (.*) http://mobile.htaccess.ru/ [L,R=301]
Если требуется настроить редирект для всех поисковых роботов (представлен список их USER_AGENT’ов)
RewriteCond %
RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
Несколько простых редиректов
Редирект с www.htaccess.ru/component/content/?view=featured на www.htaccess.ru/
RewriteCond %
RewriteRule ^component/content/$ /? [R=301,L]
Редирект с www.htaccess.ru/index.php?idc=4&marea=6 на www.htaccess.ru/
RewriteCond %
RewriteRule ^index\.php$ /? [R=301,L]
Синтаксис для регулярных выражений файла htaccess
. — Точка заменяет произвольный символ.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. “.*” — найдёт все подстроки между кавычками.
^ — начало строки (в том случае, если используется в начале выражения).
$ — обозначает конец строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
2 — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
2.11.14
08.06.21
76
103380
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID ), можно использовать следующий код:
И для домена в зоне РФ:
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
+Для всех индексных страниц на сайте:
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP _REFERER.
Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:
Если требуется настроить редирект только для некоторых USER _AGENT’ов, а не для всех пользователей #
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
Располагать после: RewriteBase /
Памятка по используемым символам и обозначениям
^ — спецсимвол начала строки;
$ — спецсимвол конца строки;
! — спецсимвол отрицания;
. — точка, заменяет любой символ, но только один;
() — группировка;
\ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
? — символ повторяется 0 или 1 раз.
+ — повторяется от 1 до 65536 раз.
* — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
301 редирект. Шпаргалка по mod_rewrite
Данная шпаргалка содержит набор директив, флагов и переменных, подсказки по синтаксису регулярных выражений, используемых 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>? | от 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 редирект. Популярные шаблоны
Склейка домена (префикс www)
www.example.com и example.com в глазах поискового работа — абсолютно разные сайты, каждый со своими показателями. Для того чтобы не распылять вес, склеиваем эти адреса
Редирект с адреса www на адрес без www
Редирект с адреса без www на адрес с www
Зачастую главная страница вашего сайта доступна по нескольким адресам: example.com/ и example.com/index.php или example.com/index.html. Для склейки таких дублей, используем следующий шаблон:
Склейка индексной страницы с корнем сайта
Склейка поддомена и папки
Редирект с поддомена на папку основного домена
При необходимости наоборот перенаправить с папки на поддомен:
Редирект с папки основного домена на поддомен
Редирект с одних расширений файлов на другие
Если вам необходимо сменить расширение файла в адресе (например page.html на page.php) или убрать его совсем:
Редирект на другой сайт
При создании зеркала сайта либо переезде на новый домен, для склейки и перенаправления используем следующую конструкцию:
Все страницы домена oldsite.com будут перенаправлены на соответствующие страницы newsite.com.
301 Редирект динамических страниц
При модернизации динамического сайта и создании ЧПУ-адресов часто возникает необходимость перенаправить старые страницы с параметрами ID на новые с ЧПУ. Например, чтобы переадресовать страницу вида http://example.com/page.php?id=13 на новую страницу http://example.com/new-url/, используется следующая конструкция:
Добавляем слеш в конце адреса
Если у вас на сайте реализованы ЧПУ адреса тем или иным способом, то вероятно ваши ссылки могут работать либо со «/» на конце адреса либо без него одинаково. Добавим однозначности и добавим слеш ко всем адресам.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.