Verification: a143cc29221c9be0

Php 301 redirect с параметрами

Что такое 301 редирект?

301 redirect действует на постоянной основе,  передает со старой страницы на новую ссылочный вес, ТИЦ сайта и PR. Также, если сайт находится в каталоге Яндекс или DMOZ, страниц нового сайта в нем, разумеется, не будет. Помимо этого, используется 301 редирект на другой сайт, и перенаправление с одной версии сайта на другую. В частности так избавляются от проблем при индексации, возникающих из-за дублирования страниц сайта.

Избавление от дублей страниц также называют канонизацией. 

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

При использовании некоторых CMS (систем управления контентом, или «движков» сайта) редирект можно настроить при помощи специальных плагинов. Однако более распространена практика настройки 301 редиректа посредством внесения изменений в файл .htaссess. 

Несколько примеров использования 301 редиректа

Cклеивания зеркал сайта 

Для поисковой системы site.name и www.site.name – разные сайты. Один из них будет проиндексирован, второй же окажется дублем. Чтобы подобного не произошло, делают так называемое «склеивание» сайта. С сайта с «www» указывается перенаправление на сайт без «www». Это делается в файле .htaccess, с помощью следующей конструкции:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.vash-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

Если на начальном этапе этого не было сделано, и в индекс попала версия сайта с «www», стоит сделать обратное перенаправление.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^vash-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://www.vash-sait.ru/$1 [R=301,L]

Перенаправление на страницу с другим url 

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

RewriteEngine On
RewriteRule ^(.*)url.html$ http://vash-sait.ru/new-url.html [R=301,L]

Перенаправление на другой домен 

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

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.staryy-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://novyy-sait.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^staryy-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://novyy-sait.ru/$1 [L,R=301]

Редирект алиасов на основной домен сайта 

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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^vash-sait.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

 Убираем расширение с помощью 301 редиректа 

Страницы, доступные по ссылкам с разными расширениями также признаются дублями. К примеру, есть страницы, с расширением .html и без него. Если вам нужно убрать его:

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

Перенаправление с index.php на главную 

В некоторых случаях, главная страница сайта доступна по нескольким адресам одновременно. Это также негативно сказывается на продвижении, так как говорит о дублировании контента. Избавиться от этого можно, применив следующую конструкцию:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://vash-sait.ru/ [R=301,L]

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$  /$1 [R=301,L]

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

Если исходный адрес содержит какой-либо параметр (например, http://vash-sait.ru/articles.php?section=1. Параметр здесь "section=1" ), то перенаправляющая конструкция будет иметь следующий вид:

RewriteEngine On
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://vash-sait.ru/articles.php? [R=301,L]

Полезное видео по теме:

Редирект через htaccess

Когда дело доходит до редиректа ссылок с get-параметрами, то многие веб-мастера обнаруживают, что стандартные правила в htaccess для них не работают:

Redirect 301 /page.php?id=1 /page/

Еще один не рабочий вариант:

RewriteRule ^page.php?id=1 /page/ [R=301,L]

Правильным решением будет использование директивы RewriteCond:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=1$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

Более подробный вариант:

RewriteEngine On
RewriteCond %{REQUEST_URI} /page.php
RewriteCond %{QUERY_STRING} ^id=1$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

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

RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

Для того, чтобы сделать переадресацию с обычного url на ссылку с get-параметрами, пишем:

RewriteCond %{REQUEST_URI} /page.php$
RewriteRule ^(.*)$ https://mysite.com/newpage?id=1 [R=301,L]

Еще один вариант:

RewriteCond %{QUERY_STRING} ^(?!id)
RewriteRule /page.php$ /newpage?id=1 [L,R=301,QSA]

Редирект средствами php

Бывают ситуации, когда удобнее воспользоваться редиректом на php:

header("Location: /page/",TRUE,301);
exit();
}
?>

В случае, если нужно сделать переадресацию нескольких url на один адрес, воспользуемся таким кодом:

'/page.php?id=1',
'/page.php?id=2',

'/page.php?id=100500'
))) {
header("Location: /page/",TRUE,301);
exit();
}
?>

Этим способом можно делать редирект для любых ссылок, кроме кириллических.

Таким же образом можно сделать переадресацию с помощью регулярного выражения:

header("Location: /page/",TRUE,301);
exit();
}
?>

Если нужно исключить любые get-параметры на главной странице:

header("Location: /",TRUE,301);
exit();
}
?>