Как настроить 301 редирект на целый ТИП контента?

InstantCMS 2.X
#16 19 февраля 2017 в 15:19


yury, вам нужен редирект менеджер — но он что-то стал на 270-271 неправильно работать (на 261 всё было нормально). Как раз там можно внести прежнюю ссылку старого сайта и редиректить на новую. В дополнении от maxisoft другая логика — там можно существующей уже на сайте странице задать новый адрес. Я вам рекомендую вообще не использовать ничего (если не удастся заставить работать редирект менеджер под 271), а ручками прописать редирект в htaccess.

Владимир
2000 ссылок переписать нереально. Вернее реально, но некорректно 2000 строк вписывать в файл для редиректа. Наверняка есть функция для перенаправления в 2-3 строки
#17 20 февраля 2017 в 22:37
пробовал так

RewriteCond %{REQUEST_URI} !^/method/(.*).html
RewriteRule ^method/(.*)$ /method/$1.html [R=301,L]
RewriteCond %{REQUEST_URI} !^/action/(.*).html
RewriteRule ^action/(.*)$ /action/$1.html [R=301,L]

но тоже почему то не срабатывает. просто убирает слеш вконце и показывает 404 страницу.
#18 21 февраля 2017 в 17:36


пробовал так

RewriteCond %{REQUEST_URI} !^/method/(.*).html
RewriteRule ^method/(.*)$ /method/$1.html [R=301,L]
RewriteCond %{REQUEST_URI} !^/action/(.*).html
RewriteRule ^action/(.*)$ /action/$1.html [R=301,L]

но тоже почему то не срабатывает. просто убирает слеш вконце и показывает 404 страницу.

yury

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

Options +FollowSymLinks
RewriteEngine On

301-редирект с домена без WWW на домен с WWW префиксом #
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]

С домена с WWW префиксом на без #
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ site.ru/$1 [R=301,L]

Для HTTPS-версии:

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

Стандартная переадресация с одной статической страницы на другую #
Redirect 301 /was.php www.site.ru/new.php

При этом, новый адрес указывать необходимо полностью с http и доменным именем.

В ряде случаев полезна переадресация через RewriteRule #
RewriteRule ^dir /dir-new/$1 [R=301,L]

301-редирект для страницы с GET параметрами #
Скажем, адрес страницы имеет вид: www.site.ru/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-редирект со страницы без заданного параметра в корень #
Если адрес имеет следующий вид: www.site.ru/?abc то для перенаправления подойдет последовательность строчек:

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

301-редирект для конкретного файла, а не целой папки #
Если требуется настроить переадресацию только для адреса www.site.ru/dir/, но при этом чтобы страница www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.

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

Как быть с доменами в зоне РФ? #
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона.рф преобразуется в .xn--p1ai.

301-редирект с домена на домен #
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]

И для домена в зоне РФ:

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]

Настройка переадресации на папки со слешем в конце / #
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ www.site.ru/$1/ [L,R=301]

Настройка переадресации на папки без слеша (убираем слеш в конце) #
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ www.site.ru/$1 [R=301,L]

301-редирект с домена на папку на другом домене #
RewriteCond %{HTTP_HOST} ^si-te\.ru$ [NC]
RewriteRule ^(.*)$ www.site.ru/si-te/ [R=301,L]

Редирект со всех файлов домена, кроме папки администратора bitrix #
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ 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$ www.new-site.ru$1.php

Перенос картинок / изображений из папки /img/ на поддомен #
RewriteRule ^img/(.+)\.jpg$ img.domain.ru/$1.jpg [R=301,L]

Задание типа индексной страницы (php, html, htm и другие) #
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

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

Редирект с индексной страницы php на саму папку (корень) #
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ www.site.ru/ [R=301,L]

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

Редирект с поддомена на основной домен второго уровня #
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC]
RewriteRule ^(.*)$ site.ru%{REQUEST_URI} [R=301,NC,L,QSA]

Редирект для заданного файла в различных директориях (папках) #
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]

Код позволяет поставить 301-редирект со всех папок вида site.ru/***/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_HOST}%{REQUEST_URI} [R=301,L,QSA]

Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.

Перенос сайта на версию с HTTPS (для всех страниц) #
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ domain.ru/$1 [R=301,L]

Настройка 403 кода ответа сервера для реф-спама (301-редирект для спама по REFERER) для списка ресурсов #
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [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: www.site.ru/dir/");
exit();
?>

! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.

Если требуется настроить редирект только для некоторых USER_AGENT'ов, а не для всех пользователей #
RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]
RewriteRule (.*) mobile.site.ru/ [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 |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]
RewriteRule (.*) no-search.site.ru/ [L,R=301]

Несколько простых примеров #
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
RewriteCond %{QUERY_STRING} ^view=featured$ [NC]
RewriteRule ^component/content/$ /? [R=301,L]

Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
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] — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
Убираем все GET-параметры после знака вопроса (?) #
RewriteRule (.*) $1? [R=301,L]
Располагать после: RewriteBase /
#19 21 февраля 2017 в 17:57
Спасибо огромное Fuze

Если кто решит портироваться с битрикс на инстант, то будет полезно знать как сделать 301 редирект

RewriteRule ^tip1/$ /tip1$ [R=301,L]
RewriteRule ^tip2/$ /tip2$ [R=301,L]

RewriteCond %{REQUEST_URI} !^/tip1/(.*).html
RewriteRule ^tip1/(.*)$ /tip1/$1.html [R=301,L]
RewriteCond %{REQUEST_URI} !^/tip2/(.*).html
RewriteRule ^tip2/(.*)$ /tip2/$1.html [R=301,L]
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.