Как с помощью 301 редиректа. Запретить конкретный файл

💖 Нравится? Поделись с друзьями ссылкой

С 301-ым редиректом (переадресацией) вы обязательно столкнетесь при склейке зеркал сайта с префиксом WWW и без него, в случае переезда сайта на новый домен, с HTTP на HTTPS, переноса страницы в другой раздел сайта и изменения ее адреса. Во всех этих случаях важно сохранить позиции и трафик, перенаправляя его на новые страницы. Как это сделать? Предлагаем техническую инструкцию.

Код состояния HTTP 301 (Moved Permanently или 301 редирект) - это стандартный , который сообщает, что запрашиваемый ресурс перемещен и получил новый URL.

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

Настроить 301-й редирект можно разными способамипомощью HTML, PHP, плагинов для CMS, скриптов), но самый надежный и простой вариант - с помощью.htaccess (для Apache) или web.config (для IIS).

Настройка 301 редиректа в.htaccess

Htaccess - это файл дополнительной конфигурации веб-сервера Apache, с помощью которого можно задавать настройки на уровне отдельных каталогов. В отличие от главного файла конфигурации httpd.conf , директивы в.htaccess распространяются только на тот каталог, где он размещен, и на дочерние каталоги.

Если в корневой папке вашего сайта нет файла.htaccess, его нужно создать и загрузить с помощью FTP-клиента. Теперь можно приступать к настройке.

Когда вам требуется сделать редирект с текущего домена на другой (например, при переезде сайта), можно использовать директивы модуля mod_alias. Пропишите в.htaccess следующую директиву (вместо newsite.ru укажите ваш новый домен):

Redirect permanent / http://newsite.ru/

Redirect 301 / http://newsite.ru/

Приведем еще примеры настройки переадресации 301.

Редирект со страницы page1.html на страницу page2.html :

Redirect 301 /page1.html site.ru/page2.html

Редирект с главной страницы сайта на страницу каталога /cat :

Redirect 301 / site.ru/cat

Редирект с каталога /cat на главную :

Redirect 301 /cat site.ru

Редирект часто используют для склеивания зеркал. В этом случае применяется модуль mod_rewrite. Например, если вы хотите, чтобы шел редирект , то пропишите такие строки (где yoursite.ru - ваш домен):

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.yoursite.ru$
RewriteRule ^(.*)$ http://yoursite.ru/$1

И наоборот - редирект с домена без www на домен с www :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^ yoursite.ru
RewriteRule (.*) http://www.yoursite.ru/$1

Редирект всех страниц сайта при :

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI}

Если не сработает, можно попробовать такой вариант:

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Также 301 редирект используется в борьбе с дублями страниц. Приведем несколько примеров.
Для поисковых систем URL http://www.yoursite.ru/ и http://www.yoursite.ru являются разными. Поэтому надо решить, какой тип использовать: со слешем в конце или без него. Для того чтобы убрать слеш в конце URL , пропишите правило:

RewriteEngine On
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.*)(/)$ $1

Добавить слеш можно таким образом:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/

Для того чтобы заменить все.htm файлы.html файлами , пропишите следующие строки:

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html

Если вы прописываете несколько директив, то строка «RewriteEngine on » указывается один раз - с ее помощью включается модуль mod_rewrite .

Если вы создаете файл.htaccess с нуля, то все команды указываются внутри таких строк:



Например, так будет выглядеть файл.htaccess с двумя редиректами: с www на без www и со страниц без слеша на страницы со слешем в конце:

Настройка редиректа в web.config

Вариант редиректа с помощью.htaccess работает только для Apache. Для веб-сервера IIS настраивать переадресацию нужно в файле web.config . Например, редирект с одной страницы (yoursite.ru/page.html) на другую (yoursite.ru/page2.html) будет выглядеть так:








301 редирект с домена с www на домен без www настроить можно таким образом:















Альтернативные способы настройки переадресации

Если по какой-то причине вы не можете создавать и редактировать web.config или.htaccess (например, в силу ограничений на хостинге) или вам нужна определенная обработка полученных данных, их модификация или проверка, по результатам которой реализуется перенаправление, вы можете настроить редирект с помощью PHP.

Синтаксис следующий:

В этом случае происходит принудительная передача кода HTTP-ответа 301, и пользователь перенаправляется на страницу http://newsite.ru/.

Если у вас небольшой сайт с парой страниц, то редирект можно сделать с помощью HTML:

Изменяя цифру 0 , вы задаете количество секунд до переадресации. В этом случае редирект реализуется не на стороне сервера, а на стороне клиента (не передается заголовок 301).

Также редирект можно сделать с помощью JavaScript:


window.location.replace("newsite.ru");

В этом случае также не передается заголовок 301. И если у пользователя в браузере отключена поддержка JavaScript, то редирект не сработает.

Вариантов редиректов бесчисленное множество. Упростить работу можно с помощью генераторов редиректов. Это онлайн-сервисы, которые выдают готовые коды, - вам нужно лишь указать, откуда и куда перенаправить пользователя. Вот некоторые из этих сервисов: www.webconfs.com , www.rapidtables.com , www.htaccessredirect.net .

Как настроить редирект, если нет опыта веб-программирования?

Настройка редиректа - сложная техническая задача, для выполнения которой не обойтись без профильных знаний. Если вы не владеете навыками разработки и программирования, и у вас под рукой нет штатного программиста, можно воспользоваться поддержкой хостинг-провайдеров. Многие из них предлагают услугу web-форвардинга (или «переадресация домена», «URL-форвардинг» и т. п.). Она позволяет настроить переадресацию с одного URL на другой. При этом используется 301 редирект.

Другой вариант - для популярных CMS. Так, для WordPress есть плагины Redirection, Safe Redirect Manager, Simple 301 Redirects, а в Joomla! и есть встроенные инструменты редиректа.

Не уверены, что сможете правильно настроить редиректы своими руками? Лучше не рисковать - в системы PromoPult за вас все сделают профессиональные вебмастера.

Заключение

Лучший способ настроить 301 редирект - с помощью.htaccess. Но он подходит только для веб-серверов Apache. Для IIS придется настраивать web.config. Если же нужно не просто сделать редирект, а учесть определенные условия, то используйте PHP, но в этом случае без помощи программиста не обойтись.

Есть и другие способы (в частности, с помощью HTML и JavaScript), но это не 301 редирект, а просто перенаправление без передачи веса. Также можно использовать плагины для популярных CMS или подключить услугу web-форвардинга, если ее оказывает ваш хостинг-провайдер.

Редирект – это способ переадресации пользователей и поисковых роботов на URL адрес, который отличается от первоначально запрошенного. Существует несколько видов переадресации, некоторые из которых приведены ниже.

301 Moved Permanently

301 – постоянный редирект, который указывает на то, что запрашиваемая страница находится по новому адресу, а старый нужно считать устаревшим. Такой вид редиректа передает 90-99% ссылочной массы на новый URL.

Канонизация или склейка домена

Для склейки домена с www на без www:

RewriteCond %{HTTP_HOST} ^www.site\.com$ RewriteRule ^(.*)$ http://site.com/$1

Для склейки домена с без www на с www:

RewriteCond %{HTTP_HOST} ^site\.com$ RewriteRule ^(.*)$ http://www.site.com/$1

Для правильного выбора метода склейки нужно рассмотреть такие факторы:

  • У какого варианта выше индексация;
  • У какого варианта выше позиции в выдаче;
  • Канонизация слэша в конце адреса.

При создании проекта сайта нужно решить, использовать ли слэш в конце адреса. Для поисковых систем адреса вида:

  • http://www.site.com/category1
  • http://www.site.com/category1/

Являются разными URL. Поэтому когда решите, какого вида будут адреса у вас на сайте, нужно прописать такой код для того, чтобы убрать слэш в конце:

RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ RewriteRule ^(.*)(/)$ $1

или такой, чтобы добавить его:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/

Для редиректа 301 одной страницы на другую :

Redirect 301 /oldpage.html http://www.site.com/newpage.html

Чтобы убедиться, что при запросе любой версии главной страницы, к примеру: default.htm или index.html , будет произведен редирект на каноничную страницу http://www.site.com , нужно прописывать следующий код редиректа:

RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1

Редирект каталога

Если в адресе у вас отображается структура каталога, то при изменениях у вас будет менять и адрес. Поэтому нужно прописывать такой редирект:

RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2

Но бывает так, что адрес старого каталога отображается сразу после доменного имени, например www.site.com/old-catalog/ . В этом случае используется такой код:

RewriteRule old-catalog /(.*) / old-catalog /$1

Редирект при изменении расширения файлов

При смене CMS обычно меняется только расширении файлов. Для канонизации страниц в этом случае нужно использовать код вида:

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

Редирект при появлении нескольких слэшей или тире

По разным причинам бывает, что в адресе появляются лишние слэши или тире, например www.site.com/catalog////page-1.html . Такие страницы нужно переадресовывать на адреса с одним слэшем .

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2

Таким же образом убираются и лишние тире в адресе, например изменение www.site.com/catalog/page-1.html на www.site.com/catalog/page-1.html .

RewriteCond %{REQUEST_URI} ^(.*)-(.*)$ RewriteRule . %1-%2

.htaccess - лишние слэши после имени домена

  • http://site.com//////catalog

Чтобы убрать все эти слэши так, чтобы было перенаправление на страницу без слэшей, т.е.

  • http://site.com/catalog

Нужно прописать:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2

Генерация 301 редиректов

Если технических знаний для написания собственного кода не хватает, то есть специальные сервисы генерации всех основных редиректов:

Здесь вы можете, вставив свои данные, мгновенно получить нужный код. Поддерживаются редиректы для доменов, url адресов, каталогов.

Как проверить 301 редирект?

После внесения любых изменений в логическую часть редиректа, нужно проверять его работоспособность. Для мануальной проверки нужно:

  • Проверить работает ли вообще сайт – зайти на его главную страницу;
  • Побродить по сайту, его разделам и отдельным страницам.

Но есть и сервисы для автоматической проверки редиректа:

  • http://bertal.ru – очень подробные данные обо всех откликах сервера

Правила использования 301 редиректа vs Canonical

Поисковая система Google устанавливает четкие правила, только при соблюдении которых, она будет верно трактовать ваши действия. Вот как буквально понимают поисковики 301 и Canonical:

  • – данная страница является устаревшей, новая страница находится по адресу такому-то. Прошу удалить старую страницу из индекса, а новую проиндексировать и полностью передать на нее весь вес старой.
  • Canonical – кроме этой версии страницы у меня есть еще и другие. Но ты, пожалуйста, индексируй только ту, на которой стоит Canonical. Другие версии будут лежать для того, чтобы их могли просматривать люди, но тебе включать их в индекс не нужно. Весь вес стоит передавать именно на страницу с Canonical.

Предпочтения по использованию редиректа 301

Обычно, это наиболее предпочтительный метод:

  • Для отдельных страниц – если навсегда изменился ее адрес;
  • Для доменов – если сайт будет находиться постоянно на новом домене;
  • Для страниц 404 и страниц с контентом, который более не актуален. К примеру, при удалении товара из каталога можно сделать редирект на похожий по функциям товар или на страницу каталога с этим типом товаров.

Когда лучше не использовать редирект 301

  • Если их реализация невозможна или она займет неоправданно много времени.
  • Если контент дублируется на двух страницах, но обе они должны быть доступны пользователю ввиду некоторых отличий (к примеру, размера одежды).
  • Если одна страницы имеет несколько URL (сортировка каталога по разным критериям).
  • Для кросс-доменов, когда контент на двух адресах может дублироваться, но он должен быть на каждом из доменов.

Понравился пост? Нажми на кнопочки →

Редирект 301 или 301 Permanent Redirect — это правило, которое автоматически переадресовывает пользователя на другой адрес страницы. С его помощью вы можете склеить старые страницы с новыми или перенести сайт на другой домен, убрать многие дубли с сайта и многое другое. Крайне полезная вещь — поэтому нужно научиться делать его правильно!

Так же при 301 редиректе происходит склейка тИЦ (читаем ) и PR — т.е. вы можете сохранить старое значение на новом адресе. Вы можете нисколько не потерять в глазах поисковых систем. Давайте перейдем от теории к практике.

Как настроить 301 редирект в htaccess

Файл под названием.htaccess находится в главной категории вашего сайта. Это служебный файл, в котором мы будем указывать правила склейки. Открываем файл блокнотом (рекомендую notepad++ , чтобы не было проблем с кодировкой). Не забывайте, что это один из важных пунктов в .

Общий шаблон для.htaccess, которым мы будем пользоваться:

Options +FollowSymLinks RewriteEngine On #Здесь указываем правила

Все правила записываются в виде:

RewriteCond [Сравнение] [Условие] [Флаги] RewriteCond [Сравнение] [Условие] [Флаги] RewriteRule [Шаблон] [Подстановка] [Флаги]

Теперь непосредственно займемся переадресацией и разберем конкретные примеры.

Я уже писал статью про , но на всякий случай здесь обобщу, чтобы вам было удобнее пользоваться страницей.

Примеры использования 301 редиректа Редирект с index.php на главную

Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:

RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP RewriteRule ^index\.php$ http://site.ru/

Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html

Склеиваем алиасы сайта

Если у вас несколько доменов и вы хотите все их перенаправлять на основной сайт, то используем:

RewriteCond %{HTTP_HOST} ^vash-sait.com$ RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://vash-sait.ru/$1

Обратите внимание на первые 2 строки, там указано зеркало в зоне.com, если у вас иная или несколько зон, то добавляем правила.

Редирект с www на без www

Этот способ я уже описывал ранее, но повторюсь. Для того, чтобы склеить зеркала и выбрать основным домен без www прописываем:

RewriteCond %{HTTP_HOST} ^www.site\.ru$ RewriteRule ^(.*)$ http://site.ru/$1

Редирект с домена без www на домен с www

Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:

RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

301 редирект страниц со слэшем и без

Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:

RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/

Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2

где, «//» можно заменить на «—» или любые сдвоенные символы в урле.

Массовая замена категории

Бывает, что вы переименовали категорию, а за ней закреплены тысячи урлов. Чтобы не состарится во время написания тысяч одинаковых перенаправлений юзаем:

RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2

RewriteRule old-category /(.*) / old-category /$1

Редирект на новую страницу

Самый простой редирект со страницы на страницу, для это просто пропишите так:

Redirect 301 /old-post.html http://new-site.ru/new-post.html

Где old-post.html — это ваша старая страница, а new-site.ru/new-post.html — это новая страница и она может быть на любом домене (включая ваш текущий домен).

Редирект для url с параметрами

Страницы с параметрами редиректятся сложнее, возьмем пример http://site.ru/page.php?sort=articles. Параметр здесь «sort=articles». Код будет следующим:

RewriteCond %{QUERY_STRING} sort=articles RewriteRule .* http://site.ru/page.php?

Работаем с расширениями

Убираем.html из url (для удаления.php не забудьте заменить $1.html на $1.php):

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]

Меняем.php на.html в урлах и наоборот (не забываем поменять местами в коде):

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

Правильный 301 редирект на новый домен

Этот пункт я выделил отдельно, т.к. он больше связан с переносом на другой домен. Тут есть важный момент, это не упустить директиву по правке роботса — она указана на 3 строке кода.

RewriteCond %{REQUEST_FILENAME} robots.txt$ RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} ^site\.ru RewriteRule ^(.*)$ http://new-site.ru/$1 RewriteCond %{HTTP_HOST} ^www.site\.ru RewriteRule ^(.*)$ http://new-site.ru/$1

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

Если у вас появились какие-то вопросы, пишите в комментарии — будем разбираться 🙂

301 код ошибки (Moved Permanently) означает, что данная страница или весь сайт перемещены на новый постоянный URL навсегда. Используется для передачи ссылочного веса. Обязательно проверяйте какой код ошибки отдает сервер, когда настроите данный редирект. Я использую для этого, например, замечательный плагин Firebug для Firefox.

Настройка 301 редиректов, если у Вас веб-сервер linux Apache, происходит в файле.htaccess. А в случае windows веб-сервера IIS — это будет файл web.config.

301 редирект на различных CMS, таких как wordpress, битрикс, друпал, dle, modx, joomla, opencart и других, настраивается с помощью специальных плагинов, а также обычным способом через htaccess или web config.

Основные операторы регулярных выражений

Перед тем, как настраивать правильные 301 редиректы в файле.htaccess нужно чётко различать основные операторы регулярных выражений (спецсимволы, модификаторы, флаги):

спецсимволы:

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

модификаторы:

  • ? — символ повторяется 0 или 1 раз;
  • + — 1 и более символов (до 65536);
  • * — 0 и более символов (до 65536);
Настройка 301 редиректов в файлах htaccess и web.config

Я публикую здесь только проверенные и технически законченные рабочие варианты 301 редиректов. База рабочих вариантов 301 редиректов будет пополняться.
Редирект со старой статической (чпу) страницы на новую страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.сайт/newpage/

Редирект на главную страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.сайт/

Редирект с главной на внутреннюю страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^$ https://www.сайт/baza-znanij-seo/nastrojka-301-redirekta/

Редирект со страниц сайта с WWW на страницы без WWW:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://сайт/$1

Редирект со страниц сайта без WWW на страницы с WWW:

RewriteEngine On RewriteCond %{HTTP_HOST} ^seowind\.ru$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ https://www.сайт/$1

Следующий пример позволяет убрать слеш на конце урла.

Редирект 301 со страниц со слешем на конце на страницы без него:

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

А здесь добавляем слеш в конец урла:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/

301 редирект с index.php на главную:

RewriteEngine On RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://www.сайт/

Редирект всех внутренних страниц на главную:

RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule !(^$|.*\.(css|jpg|gif)) /

Редирект урла с параметром на любую внутреннюю страницу сайта: (Например, со страницы http://www.site.ru/news.php?category=1 на http://www.site.ru/news.php?category=2 (здесь параметр category=)):

RewriteEngine On RewriteCond %{QUERY_STRING} category=1 RewriteRule ^news.php http://www.site.ru/news.php?category=2

Редирект урла с параметром на главную страницу сайта: (Например, http://site.ru/index.php?show_section=12 на главную страницу http://site.ru/ (здесь параметр show_section=12)):

RewriteEngine On RewriteCond %{QUERY_STRING} show_section=12 RewriteRule ^index.php http://site.ru/?

Редирект со старого домена на новый (прописываем в htaccess старого сайта):

RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.siteold\.ru$ RewriteRule ^(.*)$ http://sitenew.ru/$1 RewriteCond %{HTTP_HOST} ^siteold\.ru$ RewriteRule ^(.*)$ http://sitenew.ru/$1

Редирект с домена РФ на домен RU . Здесь важно знать, что РФ зона преобразуется в .xn--p1ai , а само название кириллического домена в соответствующий код (punycode) на латинице xn-… .

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ https://www.сайт/$1

301 редирект каталога:

RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2

Вы наверное в своей практике встречали случай, когда есть 2 сайта с одинаковой информацией, но в то же время доступные по разным адресам (сайты дубли). У этих сайтов одинаковый robots.txt, sitemap.xml и один на двоих.htaccess. Предлагаю вариант 301 редиректа с неосновного такого сайта (site2) на основной (site1):

RewriteEngine On RewriteCond %{HTTP_HOST} ^site2.ru$ RewriteCond %{HTTP_HOST} ^www.site2.ru$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://www.site1.ru/$1

Вставка включающая в себе все редиректы со страниц index|default с расширениями htm|html|php|asp|aspx на главную:

RewriteEngine On RewriteCond %{THE_REQUEST} ^GET\ .*/(index|default)\.(htm|html|php|asp|aspx)\ HTTP RewriteRule ^(.*)(index|default)\.(htm|html|php|asp|aspx)$ http://www.site.ru/$1

Часто в веб разработке требуется делать переадресации с одной страницы (например, устаревшей) на другую. При этом переадресация может выполняться разными методами - как с потерей веса страницы, так и без нее. Но об этом подробнее.

Как известно, любая страница со временем индексируется и имеет свой вес в сети. Если страница становится не актуальной, ее конечно можно удалить, но пользователи, которые перешли по ней, попадут на не существующий раздел сайта и в итоге его покинут. Правильнее считается на такие страницы делать 301 редирект на актуальные разделы сайта. Во-первых пользователь не увидит ошибку и вес старой страницы полностью передастся новой.

Переадресацию страниц можно делать разными методами. Рассмотрим основные.

301 редирект через.htaccess

В корне вашего сайта есть файл (если его нет - создайте) под названием.htaccess. Откройте его на редактирование и используйте один из следующих способов.

Redirect permanent и Redirect 301 - легко делает 301 редирект с одной страницы на другую (или сайта). Первой идет старая ссылка сайта (заметьте - без домена), второй - ссылка на новую страницу (которая может быть этим же сайтом или вообще новым).

Примеры:
Redirect permanent /staraya-stranica.php http://newsait.ru/novaya-stranica.php
(здесь просто переадресуем с устаревшей страницы на новую)

Redirect 301 / http://newsait.ru/
(здесь / означает, что все начиная с главной страницы сайта и всех его подстраниц (поддиректорий) будет переадресовываться на новый домен; т.е. фактически переадресация с оного домена на другой.)

RewriteRule редирект - более сложный редирект, чем предыдущие варианты. Требует для правильной работы подключение модуля mod_rewrite на хостинге (обычно всегда включен). Часто этот метод используют для переадресации страниц с www на такие же без www и обратно. Рассмотрим их:

Редирект домена с www на не-www
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^(.*)$ http://%1/$1

Редирект с не-www на домен с www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule ^(.*)$ http://www.%1/$1

301 редирект с домена на домен и исключением для ссылки /market/vm2_market.xml. Т.е. все запросы (кроме /market/vm2_market.xml), со старого домена на новый будут выполняться.

RewriteEngine on

301 Все запросы (кроме /market/vm2_market.xml и ссылки /texts (и всеми ее "подссылками")), со старого домена на новый будут выполняться. Также здесь работает правило переадресации определенной подссылки (RedirectMatch 301)

RewriteEngine on
RedirectMatch 301 ^/texts/data/msg/(.*)\.png$ http://olddomen.ru/texts/data/rimage/msg.php?id=$1
RewriteCond %{REQUEST_URI} !^/texts*
RewriteCond %{REQUEST_URI} !^/market/vm2_market.xml$
RewriteRule ^(.*)$ http://newdomen.ru/$1

RedirectMatch 301 - еще один хороший метод редиректа, он похож на Redirect 301, но имеет больший функционал. А именно, с его помощью можно делать редиректы на основе регулярных выражений.

Примеры:
RedirectMatch 301 ^/olddirectory/ http://сайт/newdirectory/
(Здесь переадресует всю директорию на новую)

RedirectMatch 301 ^(.*)$ http://сайт
(Переадресует все страницы со старого домена на новый с помощью 301 редиректа (вес также передается на новый сайт))

RedirectMatch 301 (.*)\..php
(Смена страниц с html расширения на php расширение)

RedirectMatch 301 /dirA/(.*)\..php
(Запускает перенаправление из директории dirA в директорию dirB только при обращении к PHP скриптам.
.php -> http://сайт/dirB/page.php - сработает
http://сайт/dirB/page.html - не сработает)

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

.* - заменяет абсолютно любой набор символов. ".*" - найдёт все подстроки между кавычками.
^ - начало строки (в том случае, если используется в начале выражения).
$ - обозначает конец строки.

\w - буква, цифра или подчёркивание _.
\d - заменяет любую цифру.
\D - заменяет любой символ, но не цифру.
- заменяет любую цифру.
- любая буква от a до z (весь латинский набор символов) в нижнем регистре.
- любая буква от A до Z в ВЕРХНЕМ регистре.
- любая буква от a до Z в любом регистре.
- то же самое.

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

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

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

Редирект через php. Если у вас обычная php страница, которую надо переадресовать на новый адрес, то можно обойтись без.htaccess

Пример:

Редирект через javascript. Также переадресацию можно сделать и на обычном javascript (правда без передачи веса страницы).

Пример:
window.location="http://сайт/category/";
(обычная переадресация на страницу сайта)
alert("Сейчас вы будете переадресованы!"); window.location="http://сайт/category/";
(обычная переадресация на страницу сайта перед которой пользователю выводится сообщение)

Рассказать друзьям