Настройка переадресации - разные способы
Расмотрим какими способами можно настроить переадресацию на Вашем сайте.
Способ переадресации на самой странице:
Переадресайия через мета не всегда срабатывает, поэтому лучше перестраховатся и скриптом.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=https://Адрес новой страницы">
<script language="jаvascript" type="text/jаvascript">
location.replace("Адрес новой страницы");
</script>
</head>
<body>
</body>
</html>
Переадресация через JS:
<script type="text/jаvascript">
location.replace("http://www.example.com/");
</script>
или
<script type="text/jаvascript">
setTimeout('location.replace("http://www.example.com/")', 5000);
</script>
Переадресация через рнр
<?php
header("Location: http://www.example.com/");
exit;
?>
// переадресовать с задержкой на 5 секунд
<?php
header('Refresh: 5; URL=http://www.example.com/');
echo 'Через 5 секунд Вы будете автоматически перенаправлены на другую страницу.';
exit;
?>
Редирект через htaccess:
1) Переадресация со всех но одну другую:
Redirect Permanent / https://site.ua
3) Переадресация с одной страницы на другую
Redirect 301 /starts.html http://site.ua/hi.html
На разных серверах могут быть разные настройки htaccess !!!
Примеры полезных переадресаций:
1. Вам нужно переадресовать все страницы с op=topic на страницу с ошибкой - 404.html
Например: /forum/?do=board&op=topic&id=344&utility=1&name=dovidka
=== Пишем:
RewriteCond %{QUERY_STRING} ^do=board
RewriteRule ^.*$ /404.html? [R=301,L]
=== чтобы в браузер отдавался ответ 404, пишем:
RewriteCond %{QUERY_STRING} ^do=board
RewriteRule ^.*$ /404.html? [R=404,L,NC]
Переадресацыя всех страниц с GET параметрами на нужную вам.
У меня была реальная проблема, мой сайт закрутили в пирамиде ссылок, на сайт ссылалось десятки тысяч страниц типа -
- /forum/away.php?s=https://www.topsexpics.eu, боротся через уддаления ссылок в гугл-вебмастере было нереально, гугл опустил сайт (наверное через уменьшение весса ссылок на 99.99%)...
Вместо отдачи ошибки 404 я все эти ссылки через редирект 301 пустил на главну страницу форума вот так.
RewriteCond %{QUERY_STRING} s=http
RewriteRule .* https://Ваш сайт/forum/? [R=301,L]
Но потом пришлось перебросить на 404
Редирект с index.php на главную
Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:
RewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /index\.php\ HTTP RewriteRule^index\.php$ http://site.ru/ [R=301,L]
Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html
Склеиваем алиасы сайта
Если у вас несколько доменов и вы хотите все их перенаправлять на основной сайт, то используем:
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]
Обратите внимание на первые 2 строки, там указано зеркало в зоне .com, если у вас иная или несколько зон, то добавляем правила.
Редирект с www на без www
Этот способ я уже описывал ранее, но повторюсь. Для того, чтобы склеить зеркала и выбрать основным домен без www прописываем:
RewriteCond%{HTTP_HOST}^www.site\.ru$ [NC]RewriteRule^(.*)$ http://site.ru/$1 [R=301,L]
Редирект с домена без www на домен с www
Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:
RewriteCond%{HTTP_HOST}^site\.ru$ [NC]RewriteRule^(.*)$ http://www.site.ru/$1 [R=301,L]
301 редирект страниц со слэшем и без
Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:
RewriteCond%{REQUEST_FILENAME}!-d RewriteCond%{REQUEST_URI}^(.+)/$ RewriteRule^(.+)/$ /$1 [R=301,L]
Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:
RewriteBase/RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_URI}!(.*)/$ RewriteRule^(.*[^/])$ $1/[L,R=301]
Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:
RewriteCond%{REQUEST_URI}^(.*)//(.*)$RewriteRule.%1/%2[R=301,L]
где, «//» можно заменить на «—» или любые сдвоенные символы в урле.
Массовая замена категории
Бывает, что вы переименовали категорию, а за ней закреплены тысячи урлов. Чтобы не состарится во время написания тысяч одинаковых перенаправлений юзаем:
RewriteRule^(.*)/old-category/(.*)$ $1/new-category/$2 [R=301,L]
Если у вас категория идет сразу после домена (типа site.ru/category/), то используем другой вариант:
RewriteRule old-category /(.*)/ old-category /$1 [R=301,L]
Редирект на новую страницу
Самый простой редирект со страницы на страницу, для это просто пропишите так:
Redirect301/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? [R=301,L]
Работаем с расширениями
Убираем .html из url (для удаления .php не забудьте заменить $1.html на $1.php):
RewriteRule^(([^/]+/)*[^.]+)$ /$1.html [L]
Меняем .php на .html в урлах и наоборот (не забываем поменять местами в коде):
RedirectMatch301(.*)\.php$ http://www.site.com$1.html
Правильный 301 редирект на новый домен
Этот пункт я выделил отдельно, т.к. он больше связан с переносом на другой домен. Тут есть важный момент, это не упустить директиву по правке роботса — она указана на 3 строке кода.
RewriteCond%{REQUEST_FILENAME} robots.txt$ [NC]RewriteRule^([^/]+) $1 [L]RewriteCond%{HTTP_HOST}^site\.ru RewriteRule^(.*)$ http://new-site.ru/$1 [R=301,L]RewriteCond%{HTTP_HOST}^www.site\.ru RewriteRule^(.*)$ http://new-site.ru/$1 [R=301,L]
С помощью таких не хитрых махинаций мы избавимся от дублей страниц, тем самым улучшив нашу внутреннюю оптимизацию и соответственно качество сайта.