Переадресация веб страниц - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

Заказать звонок

Выбери свою IT специальность

Подписка

Заказать звонок

+38 099 757 27 82

Переадресация веб страниц

advertisement advertisement

Введение

Переадресация – когда веб-страница побывала на определенном URL, а потом меняет его на другой URL. Если пользователь посетил "website.com/page-a" и произошло перенаправление на "website.com/page-b". Переадресация пригодится Вам, если Вы хотите перенаправить страницу на новое место, изменить URL-структуру сайта, удалить "WWW" из URL или даже полностью перенаправить страницу на другой сайт.

Переадресация страниц


К примеру, Вы только что перешли на новый сайт и хотите закрыть старый. Но Вам не нужно, чтобы страницы старого сайта имели статус 404 Not Found. Старые ссылки должны перенаправлять пользователя на Ваш новый сайт.

Пример: мы хотим old-website.com/blog/post перенаправить на new-website.com/blog/post, а также мы хотим перенаправить все другие страницы, использующие данный URL. Также необходимо, чтобы поисковые системы понимали, что эти изменения постоянны и обновлялись соответственно. Как же это сделать? Для начала нужно узнать немного про HTTP.

Коды ответов HTTP

Каждый раз, когда Вы заходите на URL или отправляете запрос из браузера, используется протокол передачи гипертекста (HTTP).  Это процесс, посредством которого мы запрашиваем данные, как CSS, HTML и изображения, хранящиеся на сервере. После того, как послан запрос, эти данные отвечают кодом HTTP 200 OK, означающий, что они доступны. Есть много различных видов кода ответа, самый известный – 404 Not Found; веб-страницы, а также любой другой запрашиваемый контент, например, изображения могут отвечают статусом 404.

Каждый HTTP ответ имеет определенный трехзначный номер, 404 Not Found – статусный код 4XX, указывающий ошибку клиента; 200 относится к категории 2XX и показывает, что сообщение успешно. Нас интересуют ответы HTTP-категории 3ХХ, как 301 Moved Permanently или 302 Found. Эти коды статуса специально отведены для переадресации. 

В нашем случае используется перенаправление 301, потому что определенные веб-браузеры или прокси-серверы кэшируют этот тип перенаправлений и делают старую страницу недоступной.

HTML перенаправления

Один из самых простых способов перенаправления – мета-тег refresh. Можно разместить этот мета-тег внутри тега

 в верхней части страницы HTML:

<meta http-equiv=”refresh content=”0”; url=’http://new-website.com />

Атрибут content – атрибут задержки перед перенаправлением браузера на новую страницу, он установлен на 0 секунд. Не нужно устанавливать код состояния HTTP, но важно перепроверить написание кавычек выше (есть вложенные кавычки, поэтому лучше использовать разные типы кавычек).

Хотя этот метод самый простой для перенаправления веб-страницы,  у него есть недостатки. В соответствии с W3C некоторые браузеры не воспринимают мета-тег refresh. Пользователи могут увидеть страницу А, которая загрузится раньше, чем Вы будете перенаправлены на страницу В. Также она отключает кнопку назад на старых браузерах. Поэтому этот метод не рекомендуется использовать вообще.

Лучший вариант – перенаправление сайта с JavaScript.

Перенаправления JavaScript

Перенаправить на другой URL с JavaScript довольно легко, просто требуется изменить location window-объекта:

window.location = “http://new-website.com”;

 В JavaScript есть много возможностей для этого:

window.location = “http://new-website.com”;

window.location.href = “http://new-website.com”;

window.location.assign(“http://new-website.com”);

window.location.replace(“http://new-website.com”);

Также можно просто использовать location с нужным объектом окна. И self или top.

С location объекта можно также перезагрузить страницу или изменить путь и начало URL.

Здесь присутствует несколько проблем:

  1. JavaScript должен быть включен и загружен.
  2. Пока не ясно, как поисковые системы реагируют на это.
  3. Нет кодов состояния, поэтому Вы не можете полагаться на информацию о перенаправлении.

Требуется решение на сервере, чтобы помочь нам, отправив ответ 301 в поисковые системы и браузеры.

Перенаправления Apache

Возможно, самый удобный способ перенаправления – добавление определенных правил в файл `.htaccess` на веб-сервере Apache. 

`.htaccess` – документ, дающий нам возможность отдавать команды Apache, программному обеспечению, работающему на сервере. Чтобы перенаправить пользователей, нужно создать новый (или отредактировать существующий) файл .htaccess  и добавить его в корневой каталог старого сайта. Мы будем добавлять данное правило:

Redirect 301 / http://www.new-website.com

Любая страница, открытая на старом сайте, перенаправляется на новую. Как Вы видите, мы ставим код ответа прямо перед правилом переадресации.

Этот вид переадресации работает только на серверах Linux с включенным mod_rewrite, модулем Apache, позволяющим нам перенаправить запрашиваемые URL-адреса на сервере, если определенный образец найден, он будет изменять запрос некоторым способом. Большинство хостинг-компаний поддерживают это по умолчанию. 

Вернемся к нашему примеру, если использовать код, приведенный выше, то пользователь перейдет к "old-website.com/blog/post" и будет перенаправлен по адресу "new-website.com". Неудобно то, что пользователи не видят реальную запрашиваемую страницу. Поэтому добавим следующее правило для нашего `.htaccess` файла, чтобы перенаправить все сообщения блога на нужную страницу:

RedirectMatch 301 /blog(.*) http://www.new-website.com$1

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

Redirect 301 /page.html http://www.old-website/new-page.html

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

 <IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* 404.html [L]

</IfModule>

Сначала нужно проверить, доступен ли модуль mod_rewrite и включить его. В случае, когда файл или каталог не найден, пользователь попадет на нашу страницу 404. Он увидит содержимое страницы 404.html файла в то время, как запрашиваемый URL останется тем же.

Перенаправления Nginx

Для серверов, работающих на Nginx, в `nginx.conf` файл нужно добавить блок для обработки перенаправления запросов:

server {

    listen 80;

    server_name old-website.com;

    return 301 $scheme://new-website.com$request_url;

}

LightTPD перенаправления

Для серверов, которые работают под управлением веб-сервера Lighttpd, можно сделать перенаправление, импортируя mod_redirect модуль и используя url.redirect:

server.modules = (

“mod_redirect”

)

$HTTP[“host’]=~”^(www\.)?old-website.com$”{

    url.redirect = (

    “^/(.*)$” => “http://www.new-website.com/$1”,

    )

}

PHP перенаправления

В PHP можно использовать функцию header:

header(‘Location: http://new-website.com’);

    exit;

?>

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

header(‘Location: http://www.new-website.com/’, true, 301);

    exit();

?>

Параметр true заменит ранее установленный header и 301 изменяет код ответа на правильный.

Ruby on Rails переадресации

Из любого контроллера Rails проекта мы можем быстро перенаправить на новый сайт с redirect_to. Параметру :status нужно установить значение : moved_permanently. Так переопределяется код статуса по умолчанию 302 и изменяется на Moved Permanently:

class WelcomeController

def index

redirect_to ‘http://new-website.com’, :status => :moved_permanently

    end

end

В Rails 4 можно добавить redirect в routes.rb файл, автоматически отправляющий ответ 301:

get “/blog” => redirect(“http://new-website.com”)

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

 get “/blog/:post” => redirect(“http://new-website.com/blog/%{post}”)

Node.js перенаправления

Чтобы перенаправить с помощью Node, во-первых, нужно включить HTTP модуль и создать новый сервер, используя .writeHead () метод:

var http = require(“http”);

http.createServer(function(req, res) {

    res.writeHead(301,{Location: ‘http://new-website.com’});

    res.end();

}).listen(8888);

Если Вы делаете новый файл и называете его index.js, вставьте код, приведенный выше, и запустите node index.js, в командной строке вы найдете локальную версию сайта, перенаправленную на new-website.com. Но, чтобы перенаправить все сообщения в разделе /blog, нужно разобрать URL из запроса с удобным Node URL модулем:

var http = require(“http”);

var url = require(“url”);

http.createServer(function(req, res) {

    var pathname = url.parse(req.url).pathname;

    res.writeHead(301,{Location: ‘http://new-website.com/’ + pathname});

    res.end();

}).listen(8888);

Используя функцию .writeHead (), мы можем установит путь от запроса до конца URL строки. Теперь пользователь будет перенаправлен на тот же путь на новом сайте.

Flask перенаправления

С Flask framework поверх Python мы можем создать маршрут, указывающий на подстраницы с функцией redirect, но в конце должна быть опция 301, так как по умолчанию установлена 302:

@app.route(‘/notes/<page>’)

def thing(page):

return redirect(“http://www.new-website.com/blog/” + page, code=301)

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
advertisement advertisement

Покупай подпискус доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

Стартовый
  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
59.99 $
Оформить подписку
Пакет Black Friday
  • Все видеокурсы на 15 месяцев
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
  • Скачивание видео уроков
  • Возможность приостановки обучения
110.00 $
220.00 $
Оформить подписку
Акция
Базовый
  • Все видеокурсы на 1 год
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
89.99 $
Оформить подписку
Notification success