Как сделать редирект? 6 способов редиректа

Содержание:

Как сделать редирект?

Делаем редирект на php

В php есть замечательная функция , которая разрешает не только подменять стандартные заголовки, но и добавлять новые.

Первый параметр string — полностью сформированная строка заголовка, который необходимо добавить (без завершающего перевода строки «\n»)

Второй параметр replace указывает, нужно ли заменять заголовки с одинаковыми именами (true), или же добавлять в конец (false).

Параметр http_response_code указывает код http-ответа (300, 301, 302 и т.д.).

Пример редиректа на php

Делаем редирект в .htaccess

Для осуществления редиректа в .htaccess, можно использовать любую из трех директив Apache (Апач, httpd): Redirect, RedirectMatch, либо RewriteRule (при включенном RewriteEngine).

Необязательный параметр status — это три цифры — код редиректа (например, 301). Если не указан, то по умолчанию подставляется 302.

URL-path — часть запрашиваемого пользователем (или поисковиком) адреса, которая должна обязательно начинаться со слеша (/).

URL-to-redirect — полный адрес сайта (и, возможно, часть пути), на который будет осуществляться редирект. Должен быть вида http: //site.ru/ — то есть обязательно должен присутствовать протокол (http://) и закрывающий адрес сайта слеш (/).

Если URL-path заканчивается не слешем, то редирект будет срабатывать только в случае точного совпадения запрошенного пользователем адреса и URL-path.

Если URL-path заканчивается слешем, то редирект сработает не только для указанного адреса, но и для всех, которые начинаются на указанный. А к URL-to-redirect будет добавлена часть адреса, следующая за последним указанным слешем в URL-path.

Пример

Делаем редирект на html

Это особый вид редиректа. Так как он располагается в заголовке html-документа, то страница, на которой он расположен, с одной стороны является полноценной страницей — на най может присутствовать текст, картинки и т.д. А с другой — это редирект, который срабатывает через несколько секунд (или сразу же, если указать задержку в 0 секунд).

Первый параметр seconds — это количество секунд (после полной загрузки страницы), по истечении которых произойдет редирект на второй параметр URL-to-redirect.

Пример

Редирект при помощи javascript

Редирект, написанный на яваскрипт (или же джаваскрипт — как кому больше нравится), хотя и не отдает 3xx редирект, но все же позволяет переадресовывать пользователей на нужную страницу.

Такой редирект часто используют для «обмана» поисковых систем: так как javascript обрабатывается только в браузере пользователя, но не обрабатывается поисковыми пауками. На сегодняшний день это утверждение справедливо для всех поисковиков, кроме гугла: Google успешно распознает многие редиректы, написанные с помощью яваскрипт.

  1. PHP
  2. Редиректы
  3. Примеры

Что делать, если обнаружили скрытый редирект на сайте

Действия по исправлению зависят от причины, по которой появилась скрытая переадресация.

Внимание! Перед тем как что-то делать с работающим сайтом, создайте резервную копию на хостинге и проверьте, работает ли она

Если сайт взломали злоумышленники

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

Можно поискать код вручную, часто зловредные элементы прописывают в этих местах:

  • в .htaccess — обычно это выглядит как определение устройства по юзер-агенту и переадресация;

  • в index.php в корне сайта — обфусцированный код в конце файла, огромные строки кода легко заметить и удалить;

  • в .js-файлах — аналогично, код в конце файла.

Обязательно обновите пароли — от хостинга, FTP, панели администратора и базы данных.

Если виноваты скрипты виджетов

Редирект на чужой сайт может работать через сторонние скрипты, плагины, шаблоны CMS, темы, другие элементы. Виноваты могут быть как новые недавно установленные плагины, так и те, которые давно стоят, но уже устарели — их могли взломать.

Если вы сами ничего не устанавливали, посмотрите историю доступов к сайту. Возможно, другие администраторы или модераторы поставили какой-то зараженный скрипт по незнанию или даже чтобы вам навредить

Что делать:

  1. Найдите какую-то из страниц, на которой срабатывает переадресация мобильного трафика, посмотрите код. Если на ней находятся чужие скрипты и элементы — удаляйте их по одному. Код перенаправления нужно искать в тегах script и iframe . Он может иметь вид

  2. После каждого удаления заходите на страницу со смартфона или через эмулятор браузера, и проверяйте, остался ли редирект.

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

Обязательно обновите CMS и плагины до последней стабильной версии, удалите все, что вызывает подозрение и подберите лицензионные решения с официальных источников.

Если веб-мастер сотрудничает с некачественными партнерками

Еще одна причина — веб-мастер специально или неосознанно сотрудничает с фейковыми партнерскими системами. Обычно они притворяются простыми партнерками с баннерной рекламой.

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

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

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

Важно: работа с файлом .htaccess возможна при использовании на хостинге веб-сервера Apache

Для работы в .htaccess нужно установить FTP-клиент (например, filezilla.ru или totalcommander.ru) и уметь работать с кодом, поэтому такой способ сложнее. Обычно его выбирают, когда нужно перенести домен и сделать это бесплатно. Более лёгкий способ — купить доступ к сервису. Тогда знания кода не нужны. 

Если нужно сделать перенаправление со страницы, подойдёт более простой вариант переноса — через админку сайта.

В этой статье рассмотрим эти способы на примере самых распространённых причин для редиректа. 

Перенос сайта с одного домена на другой

Этот тип перенаправления можно сделать с помощью FTP-клиента. Этот вариант подойдёт тем, кто умеет работать с кодом или готов этому научиться. 

Если язык программирования не для вас, перенести домен можно без знаний кода. У RU-CENTER есть специальный сервис «Перенаправление домена».

Перенос с помощью FTP-клиента

Откройте FTP-клиент и найдите файл .htaccess в корневом каталоге вашего сайта. Уточнить путь к корневому каталогу вы можете у вашего хостинг-провайдера. Если в корневом каталоге сайта нет файла .htaccess, создайте новый файл с таким именем (точка в начале имени обязательна). 

Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы

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

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1

HTTPS-согласования и редиректы

Одна из самых распространенных ошибок при настройке HTTPS-редиректов — это предположение, что вам не нужен сертификат SSL при переадресации клиента с одного домена на другой.

Если посмотреть на поток запросов, то видно, что обмен сертификатами SSL и согласование шифрования выполняются на первом этапе

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

После завершения первого этапа, когда клиент и сервер нашли общий язык (протокол шифрования), они могут начать взаимодействовать друг с другом, используя зашифрованное соединение. В этот момент клиент отправляет HTTP-запрос на сервер, а сервер отправляет HTTP-ответ, содержащий редирект.

Не забывайте, что редирект — это HTTP-ответ с кодом 301 (иногда 302 или 307):

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Aug 2016 14:41:25 GMT
Location: https://dnsimple.com/

Перед тем, как сделать редирект с HTTPS на HTTP, помните, что, если нужно создать редирект для всего домена, то необходим валидный сертификат SSL для перенаправляемого домена. Для согласования шифрования требуется сертификат SSL, и происходит оно до того, как запрос был обработан, а ответ о редиректе возвращен клиенту.

Если бы все происходило иначе, то редирект бы обрабатывался перед проверкой сертификата SSL. Тогда клиент и сервер были бы вынуждены общаться с помощью обычного HTTP-соединения, которое не шифруется.

Если нужно перенаправить клиента с любой страницы домена https://www.example.com на другую, необходим установленный на сервере валидный сертификат SSL, который распространяется на весь домен www.example.com.

Например, чтобы перенаправить клиента с https://www.example.com на https://example.com, необходимо иметь сертификат, который распространяется на оба или два отдельных сертификата (для каждого хоста соответственно).

Редирект в JavaScript

Метод позволяет заменить одну страницу другой таким образом, что это замещение не будет отражено в истории просмотра HTML-страниц (history) браузера

location.replace("https://www.google.com");
document.location.replace("https://www.google.com");

Метод полностью моделирует поведение браузера при нажатии на кнопку в панели инструментов. Если вызывать метод без аргумента или указать его равным , то браузер проверит время последней модификации документа и загрузит его либо из кеша (если документ не был модифицирован), либо с сервера.
Такое поведение соответствует нажатию на кнопку . Если в качестве аргумента указать , то браузер перезагрузит текущий документ с сервера. Такое поведение соответствует одновременному нажатию на и кнопки клавиатуры .

window.location.reload("https://www.google.com");

Следующие примеры тоже перенаправят на google:

location="https://www.google.com";
document.location.href="https://www.google.com";

С помощью функции возможно реализовать задержку переадресации перед выполнением редиректа (в примере — 5 секунд):

setTimeout( 'location="https://www.google.com";', 5000 );

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

<script type="text/javascript">
var sec=10;
 function Sec()
 {
  document.getElementById("sec").innerHTML=sec;
   sec--;
   if(sec==1)
   {
   	  location.replace("https://www.google.com")
   }
   setTimeout('Sec()',1000);
 }

 Sec();
</script>
<p>Подождите пожалуйста <span style="color:red;font-weight: bold;" id="sec" name="sec">10</span> сек или перейдите по этой ссылке: <a href="https://www.google.com">https://www.google.com</a></p>

Use cases

There are numerous use cases for redirects, but as performance is impacted with every redirect, their use should be kept to a minimum.

Ideally, there is one location, and therefore one URL, for each resource. But there are reasons for alternative names for a resource:

Expanding the reach of your site

A common case is when a site resides at , but accessing it from should also work. Redirections for to are thus set up. You might also redirect from common synonyms or frequent typos of your domains.

Moving to a new domain

For example, your company was renamed, but you want existing links or bookmarks to still find you under the new name.

Forcing HTTPS

Requests to the version of your site will redirect to the version of your site.

When you restructure Web sites, URLs change. Even if you update your site’s links to match the new URLs, you have no control over the URLs used by external resources.

You don’t want to break these links, as they bring valuable users and help your SEO, so you set up redirects from the old URLs to the new ones.

Note: This technique does work for internal links, but try to avoid having internal redirects. A redirect has a significant performance cost (as an extra HTTP request occurs). If you can avoid it by correcting internal links, you should fix those links instead.

Unsafe requests modify the state of the server and the user shouldn’t resend them unintentionally.

Typically, you don’t want your users to resend , or requests. If you serve the response as the result of this request, a simple press of the reload button will resend the request (possibly after a confirmation message).

In this case, the server can send back a (See Other) response for a URL that will contain the right information. If the reload button is pressed, only that page is redisplayed, without replaying the unsafe requests.

Some requests may need more time on the server, like requests that are scheduled for later processing. In this case, the response is a (See Other) redirect that links to a page indicating that the action has been scheduled, and eventually informs about its progress, or allows to cancel it.

Principle

In HTTP, redirection is triggered by a server sending a special redirect response to a request. Redirect responses have status codes that start with , and a header holding the URL to redirect to.

When browsers receive a redirect, they immediately load the new URL provided in the header. Besides the small performance hit of an additional round-trip, users rarely notice the redirection.

There are several types of redirects, sorted into three categories:

These redirections are meant to last forever. They imply that the original URL should no longer be used, and replaced with the new one. Search engine robots, RSS readers, and other crawlers will update the original URL for the resource.

Code Text Method handling Typical use case
methods unchanged. Others may or may not be changed to . Reorganization of a Web site.
Method and body not changed. Reorganization of a Web site, with non-GET links/operations.

The specification did not intend to allow method changes, but there are existing user agents that do change their method. was created to remove the ambiguity of the behavior when using non- methods.

Sometimes the requested resource can’t be accessed from its canonical location, but it can be accessed from another place. In this case, a temporary redirect can be used.

Search engine robots and other crawlers don’t memorize the new, temporary URL. Temporary redirections are also used when creating, updating, or deleting resources, to show temporary progress pages.

Code Text Method handling Typical use case
methods unchanged. Others may or may not be changed to . The Web page is temporarily unavailable for unforeseen reasons.
methods unchanged. Others changed to (body lost). Used to redirect after a or a , so that refreshing the result page doesn’t re-trigger the operation.
Method and body not changed The Web page is temporarily unavailable for unforeseen reasons. Better than when non- operations are available on the site.

The specification did not intend to allow method changes, but there are existing user agents that do change their method. was created to remove the ambiguity of the behavior when using non- methods.

(Not Modified) redirects a page to the locally cached copy (that was stale), and (Multiple Choice) is a manual redirection: the body, presented by the browser as a Web page, lists the possible redirections and the user clicks on one to select it.

Code Text Typical use case
Not many: the choices are listed in an HTML page in the body. Machine-readable choices are encouraged to be sent as headers with .
Sent for revalidated conditional requests. Indicates that the cached response is still fresh and can be used.

Редиректы

Редирект на .html

Пример, редирект с c site.ru/blog на site.ru/blog.html.

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html 
RewriteRule ^(.*)/$ /$1.html 

Редирект на страницу без слеша в конце адреса

Пример, редирект с c site.ru/blog/ на site.ru/blog.

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

Редирект на страницу со слешем в конце адреса

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ 

Редирект на страницу без index.php в адресе

RewriteRule ^index.php/(.*)$ http://mysite.ru/$1 

Редирект на страницу без index.php в конце адреса

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

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

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

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

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

Склейка доменов

Пример, у вас несколько доменов, но посетитель должен переправляться на один.

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

Редирект со старых статических url на новые

Пример редирект со страницы http://site.com.ru/id=21.

RewriteCond %{QUERY_STRING} ^id=21$
RewriteRule ^/page.php$ http://site.ru/news.html 

Защита от хотлинка

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

Вместо site.ru укажите адрес сайта, jpg|jpeg|png|gif — расширение запрещенных изображений, images.jpg – изображение которое будет показываться, если картинка находится не в корне сайта, укажите полный путь.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.ru 
RewriteRule \.(jpg|jpeg|png|gif)$ images.jpg 

Защита от брутофорса

Разрешаем доступ к директории administrator только по протоколу HTTP, что отсеет некоторых ботов. Для каждой CMS нужно указать свой адрес, например wp-login, wp-admin и так далее.

RewriteCond %{REQUEST_URI} ^/administrator\.php$
RewriteCond %{THE_REQUEST} HTTP/1\.0
RewriteRule ^(.*)$ - 

Бытует легенда, что происхождения названия сервера Апач происходит не от названия индейского племени. Когда сервер был еще в самом начале пути, группа энтузиастов небольшие дополнения к коду, патчи (англ – patch), и «a patchy server» превратилось в Апач, а знаменитое перо на логотипе появилось позже.

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

Статья писалась эпизодическими «набегами», так что если увидите ошибку, поправьте.

Мой аккаунт на Marketplace — https://timeweb.com/ru/community/marketplace/bashkov-vladislav, обращайтесь

Пример с nginx rewrite

Теперь другая проблема. Возьмем такой url — http://site.ru/catalog/. В текущем конфиге он превращается в  https://site.ru/catalog//. Исправляем это:

server {
 listen 80;
 server_name site.ru www.site.ru;

 location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff)$ {
  return 301 https://site.ru$request_uri;
 }
    
 location / {
  rewrite ^/(.*)/$ /$1;
  return 301 https://site.ru$uri/;
 }
}

Обращаю внимание на то, что сделано. Я использую без какого-либо флага на конце, чтобы не прекращать обработку директив

В данном случае просто меняется uri и передается дальше. Если запрос приходит со слешом на конце, мы его обрезаем и отправляем в правило редиректа на https. Если слеша нет, то он сразу на редирект уходит. Теперь все в порядке.

Как сделать редирект страницы. Способ 1 — PHP-редирект.

Этот редирект срабатывает без загрузки странички.
Страничка на которую идёт редирект — получает оригинальный REFERER (т.е. таким образом не скрыть откуда был редирект).

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

Редирект нужно оформлять в файл.php и ОБЯЗАТЕЛЬНО до вывода любых символов. То есть если будет лишний пробел или символ, который выводится на экран (например до знака <?) — то редирект не сработает. Любой вывод на такой страничке (коды метрики и т.п.) не сработают после редиректа, а если написать до редиректа — не сработает редирект.

Как писать редирект, пример, — файл index.php:

<?php
header («Location: //leonov-do.ru/»);
?>

301 и 302 редирект особой разницы не имеют для арбитражника (обычно в SEO больше) — но некоторые рекламные сети принципиально пропускают только один из редиректов. Технически 301 обозначает временный редирект, а 302 — постоянный редирект. Указать можно третьим параметром функции код редиректа, например 302 (второй должен быть true, параметры идут через запятую):

<?php
header («Location: //leonov-do.ru/», TRUE, 302);
?>

Как устроен редирект?

Общий алгоритм редиректа выглядит следующим образом:

1. Пользователь в браузере открывает страницу. Например, site/abc.html

2. Сайт возвращает браузеру специальный заголовок, в котором указывает какую страницу необходимо открыть вместо запрошенной. Например, site/abc2.html

3. Браузер открывает страницу, адрес которой был указан в заголовке.

В реальности же, зависит от того, как реализован редирект:

1. С помощью htaccess. Многие существующие сайты используют Apache (серверная программа для сайтов). И файл htaccess позволяет настраивать в нем сложные правила переадресации страниц. Алгоритм аналогичен общему.

2. С помощью PHP (и иные серверные языки). Тот же самый специальный заголовок может сформировать серверный язык, такой как php. Алгоритм аналогичен общему.

3. С помощью мета тега HTTP-EQUIV=REFRESH. С некоторого времени, браузеры стали поддерживать специальный мета тег в html, который позволяет перенаправлять пользователей с одной страницы на другую. Пример:

<meta http-equiv="refresh" content="5; URL=site.ru">

где «5;» — это время в секундах, через которое необходимо осуществить редирект, а URL=site.ru — это адрес страницы.

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

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

4. C помощью JavaScript. Это не совсем переадресация в полноценном смысле. Дело в том, что перенаправление на другой url происходит после того, как страница будет полностью загружена (в этом смысле схоже с мета тегом), и после выполнения специальной команды, вида:

window.location.href = "";

Отличие в том, что данная команда может быть вызвана в произвольном месте и неожиданно для браузера. Именно поэтому этот метод сложно считать полноценным редиректом.

Стоит знать, что корректными для поисковых систем считаются htaccess, php и мета тег. JavaScript далеко не всегда может корректно восприниматься, поэтому его стоит использовать только для внутренних целей (например, в ЛК пользователей).

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

Прежде всего необходимо разобраться с вопросом «Что такое редирект сайта?». В дословном переводе с английского это слово означает перенаправление. Например, если на одной из городских улиц по какой-то причине случился затор, регулировщик может перенаправить городской трафик на другую. Редирект работает похожим образом.

Редиректом в терминах IT называют автоматическую переадресацию пользователя с одного адреса страницы на другой. В большинстве случаев процесс перенаправления абсолютно незаметен для посетителя сайта.

Наши продукты помогают вашему бизнесу оптимизировать расходы на маркетинг
Узнать подробнее

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

  • Редирект 302. Применяется в случае временной переадресации с одного url на другой. При его использовании поисковая система индексирует все доступные версии сайта или страницы. Объединения ссылочного веса и внутренних метрик на приоритетном ресурсе не происходит. 
  • 307 Temporary Redirect рекомендуется применять в исключительных случаях. Например, при техническом обслуживании сайта, когда он недоступен некоторое время. 
  • Обновления Meta Refresh выполняют переадресацию не на уровне сервера, а непосредственно на сайте. Пользователь сталкивается с временной задержкой (обычно около пяти секунд), после чего для перехода на нужную страницу должен принудительно запустить определенную команду. Этот метод часто приводит к падению посетительского интереса и проседанию поисковых индексов.
  • Редирект rel=«canonical». Позволяет сохранить доступ посетителям ресурса к контенту дублирующихся страниц. При этом для поисковиков наличие команды canonical на одной из страниц говорит о том, что только она подлежит индексации в поиске.

В большинстве случаев постоянная переадресация является более правильным решением, чем временная. На практике это объясняется просто. Предположим, сайт сменил доменную зону, а затем еще и обзавелся защищенным протоколом https. При настройке временной переадресации в индексе Яндекса и Google по одним и тем же запросам появились три версии сайта с пропорциональным проседанием позиций в выдаче. После настройки редиректа 301 на приоритетный url произошло склеивание дублей, робот вернул сайт в топ выдачи. 

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

Способ 5. Javascript-редирект с задержкой.

Этот вариант больше подходит если нужно сначала выполнить какой-то Javascript-код (например Метрики и т.п.) — а потом редиректить.

Не слишком надёжный способ выполнения задержки, т.к. у всех на компьютерах скорость выполнения Javascript может быть разной, но это лучше чем ничего. Т.е. можно рядом поставить код метрики и к примеру задержку в 300 миллисекунд — код Метрики скорее всего успеет выполниться и потом будет редирект.

Таким образом, можно пробовать использовать и этот редирект для учёта достижения целей в метрике например и др.

<script >
<!—
setTimeout (‘window.location = «//leonov-do.ru/»;’, 300);
//—>
</script>

В данном случае код сработает через 300 миллисекунд (1000 = 1 секунда). Не очень удобно может быть и для посетителя, но если нужен учёт метрикой (и не используются цели на предыдущей страничке на клик по кнопке и т.п.) — это тоже вариант.

Настройка перенаправлений

Настройки необходимо вносить в файлах конфигураций виртуальных доменов. В Linux на основе RPM (CentOS, Red Hat), как правило, они расположены в директории /etc/nginx/conf.d/. В Linux на основе Deb (Ubuntu, Debian) — в директории /etc/nginx/sites-enabled/. Во FreeBSD все в одном файле — /usr/local/etc/nginx/nginx.conf.

Саму настройку на перенаправление в NGINX можно прописать несколькими способами.

1. Первый:

rewrite ^ https://$host$request_uri? <флаг>;

* $host — имя хоста из запроса, если отсутствует — имя в поле «Host» заголовка, если тоже отсутствует — имя сервера; $request_uri — первоначальный запрос с аргументами (все, что идет после доменного имени).
** где флаги могут быть следующие:

  • permanent — перенаправление с кодом 301.
  • redirect — перенаправить с кодом 302.
  • last — закончить обработку с переходом в новый location.
  • break — закончить обработку и остаться в текущем location.

2. Второй: 

return <код> https://$host$request_uri;

* где коды могут использоваться любые, но чаще всего — 301, 302, 404.

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

После внесения изменений, необходимо проверить их корректность:

nginx -t

И для их применения перезапустить веб-сервер:

systemctl restart nginx

service nginx restart

* в первом примере перезапуск выполняется на новых системах Linux. Второй пример — на устаревших или FreeBSD.

Проверяя редиректы в браузере, следует учесть, что настройки могут кэшироваться. Для обновления кэша используйте комбинацию Ctrl + F5. Если и это не помогает, закрывайте вкладку и открывайте новую.

В каких случаях используется постоянный редирект 301

  1. Смена доменного имени, перенос сайта. Необходимо произвести тотальную настройку переадресации со старого адреса на новый, чтобы все без исключения запросы к old_site.ru перенаправлялись на new_site.ru.

  2. Изменение написания url определенных страниц в целях SEO-продвижения, смены CMS или по иным причинам. Требуется настроить редирект с site.ru/1hdkr5 на site.ru/page_adress.

  3. Перенос разделов на субдомены. Необходимо сменить адрес www.site.ru/example на example.site.ru.

  4. Для аккумуляции трафика с адресов, купленных в разных доменных зонах, на один приоритетный ресурс. 

  5. Исключение дублирующихся страниц из индекса. 

  6. Склейка зеркал сайта – вариантов сайта с идентичным контентом, но разным написанием адресов: site.ru, www.site.ru, https://site1.ru и т.д. В этом случае выбирается один приоритетный домен и на него настраивается редирект со всех остальных зеркал.

  7. Удаление ранее существовавшей страницы. В этом случае пользователи обычно видят ошибку 404. Большое количество таких сообщений негативно воспринимается как пользователями, так и поисковиками.

  8. Для быстрого перехода пользователя на мобильную версию ресурса со смартфонов и планшетных устройств.

Полезные советы

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
  • При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.

Настройка перенаправлений на распространённых серверах

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

У модуля mod_alias есть директивы и которые, по умолчанию, устанавливают код ответа :

<VirtualHost *:80>
	ServerName example.com
	Redirect / http://www.example.com
</VirtualHost>

URL будет перенаправлен к  (но не к  )

 делает то же, но использует регулярное выражение, чтобы определить множество URL адресов, которые подпадут под эффект:

RedirectMatch ^/images/(.*)$ http://images.example.com/$1

Все документы в папке  будут перенаправляться к другому домену.

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

Redirect permanent / http://www.example.com
Redirect 301 / http://www.example.com

Также модуль mod_rewrite может использоваться для создания перенаправлений. Они более гибкие, но сложнее в использовании.

В Nginx, вы создаёте особый серверный блок для контента, который вы хотите перенаправлять:

server {
	listen 80;
	server_name example.com;
	return 301 $scheme://www.example.com$request_uri;
}

Чтобы применить перенаправления к папке или подмножеству страниц, используйте директиву :

rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
rewrite ^/images/(.*)$ http://images.example.com/$1 permanent;

В IIS, вы используете элемент  для настройки перенаправлений.

Как сделать, чтобы это не повторилось — защищаем сайт

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

Обновляйте версии, не ставьте пиратский софт

Если вы нашли причину утечки мобильного трафика в каком-то расширении или модуле, возможно, больше не стоит пользоваться сайтом, на котором вы его взяли. Используйте только лицензионное ПО и устанавливайте все виджеты, модули, плагины и всевозможные решения только с официальных ресурсов. Чем меньше установлено, тем лучше — вероятность уязвимости статистически меньше.

Следите за новостями и проверяйте список уязвимостей для вашей CMS, набора библиотек или фреймворка. Если вскрылась уязвимость, разработчики торопятся выпустить обновление с исправлением.

Поговорите с сотрудниками, обновляйте пароли

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

Для панели администратора можно установить задержку ввода пароля для следующих попыток после ввода неправильного. Так злоумышленнику будет сложнее перебирать пароли к админке сайта.

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

Внимательнее выбирайте рекламодателей

Обещания золотых гор хоть и звучат соблазнительно, на деле оказываются приманкой для участия в фейковых партнерских программах. Аккуратно выбирайте рекламодателей, используйте Google.Adsense, Яндекс.Директ и другие проверенные варианты.

Расскажите о своем опыте: вы сталкивались с такими редиректами? Как исправили ситуацию?

Заключение

Я прилично заморочился с темой редиректов в nginx. Раньше никогда не обращал на них пристального внимания. Да и у других не видел акцента на этом. В интернете полно готовых вариантов перенаправлений на все случаи жизни, но рассмотрены они в отдельности. А вот так комплексно взглянуть на полный конфиг со всеми нюансами не приходилось.

В завершении рекомендую мою статью про настройку nginx. Я там частично рассматриваю и эту тему

А вообще там рассказаны все основные моменты, на которые стоит обращать внимание при работе с nginx

Онлайн курс Infrastructure as a code

Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.

Что даст вам этот курс:

  • Познакомитесь с Terraform.
  • Изучите систему управления конфигурацией Ansible.
  • Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
  • Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
  • В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins

Смотрите подробнее программу по .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector