Php редирект внешних ссылок и скрытие реферальных ссылок
Содержание:
- Использование функции PHP header() для редиректа URL-адреса
- Что такое 301 редирект?
- Все стандартные редиректы в nginx
- Редирект через .htaccess
- Пример с nginx rewrite
- Как сделать редирект URL-адресов с помощью mod_alias Apache
- Как сделать редирект?
- LightTPD перенаправления
- Редирект ссылок через htaccess
- Открытие в новом окне
- Переадресация с http на https
- Простой роутинг
- Редиректы
- Что такое редирект
- Ruby on Rails переадресации
- В каких случаях используется постоянный редирект 301
- Авторская схема: бесплатный редирект ссылки на uCoz
- Заключение
Использование функции PHP header() для редиректа URL-адреса
Если хотите добавить редирект с initial.php на final.php, можно поместить на веб-странице initial.php следующий код. Он отправляет в браузер новый заголовок location:
<?php $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); ?>
Здесь мы используем PHP-функцию header(), чтобы создать редирект. Нужно поместить этот код перед любым HTML или текстом. Иначе вы получите сообщение об ошибке, связанной с тем, что заголовок уже отправлен. Также можно использовать буферизацию вывода, чтобы не допустить этой ошибки отправки заголовков. В следующем примере данный способ перенаправления PHP показан в действии:
<?php ob_start(); $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); ob_end_flush(); ?>
Чтобы выполнить переадресацию с помощью функции header(), функция ob_start() должна быть первой в PHP-скрипте. Благодаря этому не будут возникать ошибки заголовков.
В качестве дополнительной меры можно добавить die() или exit() сразу после редиректа заголовка, чтобы остальной код веб-страницы не выполнялся. В отдельных случаях поисковые роботы или браузеры могут не обращать внимания на указание в заголовке Location. Что таит в себе потенциальные угрозы для безопасности сайта:
<?php $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); exit(); ?>
Чтобы прояснить ситуацию: die() или exit() не имеют отношения к редиректам. Они используются для предотвращения выполнения остальной части кода на веб-странице.
При PHP перенаправлении на страницу рекомендуется использовать абсолютные URL-адреса при указании значения заголовка Location. Но относительные URL-адреса тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.
Что такое 301 редирект?
301 редирект или 301 Permanent Redirect – это постоянная переадресация одного URL-адреса на другой. Само слово «редирект» дословно переводится с английского как «перенаправление».
Фактически это ответ сервера на запрос к нему, и ответ этот имеет код 301, говорящий о том, что адрес запроса был изменен навсегда. Результатом всех этих странных для новичка манипуляций становится то, что мы должны увидеть в браузере какой-то другой конечный адрес.
.htaccess
Если приложить максимум усилий — 301 редиректом возможно решить широкий круг проблем с оптимизацией, и глобально улучшить конверсию сайта. Соответственно, как сделать редирект на другой сайт нужно знать любому SEO специалисту и веб-мастеру.
Главное в этом деле — не забыться и не натворить лишнего, а также помнить о том, что перед каждым добавлением новых редиректов необходимо делать бекап файла .htaccess.
Зачем нужен 301 редирект и в каких случаях его используют?
301 редирект — весьма универсальный инструмент для любого оптимизатора. Он позволяет совершить перенос ссылочного наполнения одной страницы на другую. Чаще всего делают редирект на другой сайт при переезде на другой домен, соединении дублей интернет страниц или перенаправлении с «www» на «без www» и наоборот.
wwwбез wwwпо наследству
301 редирект способен передать:
- индекс цитирования;
- все ссылочное наполнение.
301 редирект не способен передать:
- возраст сайта;
- какие либо фильтры или санкции;
- присутствие в каталогах.
Ко всему прочему, возможен вариант, когда редирект выступает способом добавления в конце ссылки косой черты — слеша. То есть «http://site.com/news» при помощи редиректа изменяют на «http://site.com/news/».
Обобщая, 301 редирект необходим, как для пользователей, так и для поисковых роботов. Он позволяет и тем, и другим распознать, что появился новый сайт, домен или страница, а так же мгновенно переадресовывает их туда.
Кроме всего прочего 301 редирект достаточно часто используется в SEO, так как позволяет показать поисковым роботом, что страница переадресуется навсегда. Ну и, конечно, 301 редирект позволяет без труда перенести позиции старых страниц на новые.
Как настроить 301 редирект?
Решений этой задачи на самом деле множество, все зависит от того какими техническими характеристиками обладает хостинг вашего сайта. Сейчас мы приведем несколько наиболее простых вариантов, как сделать 301 редирект.
Запомните, что все операции производится в файле .htaccess или httpd.conf (для сервера Apache).
Вариант 301 редиректа для переадресации на другой домен:
Redirect 301 / http://www.site.com/index.htm
В данном примере все страницы сайта будут перенаправлены на другой.
301 редирект для одной страницы выглядит так:
Redirect 301 /site1/page1.htm http://www.site2.com/page2.htm
В качестве последнего примера приведем следующее:
Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/
Видно, что при попадании пользователя или поискового робота в директорию test он автоматически перенаправляется на «www.test.com», все остальные перейдут на «enter.test.com».
Можно, конечно, использовать готовый скрипт редиректа, которых полно в сети. Однако для успешности данной операции необходимо чтобы на хостинге были включены модули «mod_alias».
Как проверить работает ли 301 редирект?
Самые распространенные ошибки, при которых 301 редирект отказывается работать правильно – это наличие прочих редиректов, мешающих работе.
После того как вы настроили 301 редирект необходимо проверить его на работоспособность. Для этого нужно зайти не только на главную, но и прочие страницы сайта.
Переходя к практике, давайте рассмотрим как проверить 301 редирект.
Допустим, посетитель вводит в адресной строке браузера ссылку «http://primer.com/index.php» и нажимает «ввод». Браузер совершает HTTP-запрос и посылает его серверу, который возвращает HTTP-ответ.
При установленном редиректе, в поле «Location» будет прописан другой адрес страницы, например: «http://primer.com/surprize.php», куда и произойдет переадресация.
Существует много сервисов и плагинов позволяющих проверить работоспособность редиректа.
HttpFox
Плагин HttpFox для браузера Mozilla Firefox построчно фиксирует загрузку страницы, что позволяет отслеживать связки редиректов, а так же порядок и быстроту загрузки интернет страницы.
Надеемся, что данная статья помогла вам сделать редирект на новые страницы сайта без каких-либо проблем.
Удачи Вам!
Все стандартные редиректы в nginx
Рассмотрю типовой пример, когда у нас одновременно присутствуют следующие редиректы:
- С http на https.
- С www на без www для обоих протоколов.
- Без слеша на конце на урл со слешем.
Наша цель будет реализовать все преобразования url в одном месте и выдать клиенту только один 301-й редирект.
server { listen 443 ssl http2; server_name site.ru; root /web/sites/site.ru/www/; index index.php index.html index.htm; access_log /web/sites/site.ru/log/access.log main; error_log /web/sites/site.ru/log/error.log; ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem; location / { rewrite ^(*)$ $1/ permanent; try_files $uri/ /index.php?$args; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ { access_log off; expires max; } location ~* ^/(\.ht|xmlrpc\.php)$ { return 404; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php7-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/site.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/site.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/site.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param HTTPS on; fastcgi_intercept_errors on; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } } server { listen 443 ssl http2; server_name www.site.ru; location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ { return 301 https://site.ru$request_uri; } location / { rewrite ^/(.*)/$ /$1; return 301 https://site.ru$uri/; } } server { listen 80; server_name site.ru www.site.ru; location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ { return 301 https://site.ru$request_uri; } location / { rewrite ^/(.*)/$ /$1; return 301 https://site.ru$uri/; } }
Получилось примерно так. Призываю не копировать бездумно конфиг, а проверить то, что я предлагаю. Хотя я сам внимательно проверил, как мог, но все равно не застрахован от ошибки. На мой взгляд здесь рассмотрены все основные моменты с редиректами. На выходе всегда один 301 редирект, какой бы запрос мы не сделали. При этом все реализовано средствами самого веб сервера, а значит, будет работать максимально быстро.
Редирект через .htaccess
Напомню, что .htaccess — это специальный файл, который лежит в корневой папке вашего сайта. В нём есть возможность прописать все необходимые редиректы. Таким образом, уже на уровне веб-сервера происходит переход на нужную страницу без загрузки промежуточных.
В общем виде редирект через файл .htaccess выглядит так:
Где:
- КОД_РЕДИРЕКТА — номер редиректа (можно не указывать, по умолчанию стоит 301);
- /АДРЕС_ОТКУДА — страница, с которой будет осуществлен переход. Обязательно должна начинаться со слэша «/»;
- АДРЕС_КУДА — полный адрес (URL) куда будет осуществлена переадресация;
Ниже мы рассмотрим несколько примеров. Советую также ознакомиться с полным руководством редиректа с помощью .htaccess.
1) Редирект с www и без www
301 редирект с сайта без www на вариант с www.
В данном случае будет автоматически переход с любой страница site.ru на www.site.ru соотвественно. Например
Для обратного редиректа с www на без www (www.site.ru -> site.ru) необходимо прописать следующий код:
Есть и ещё варианты реализации этих перенаправлений, которые можно посмотреть в отдельной статье редирект 301 с www на без www.
2) Переадресация пользователя на другой домен
3) Переадресация пользователя со страницы на другой адрес
4) Редирект при смене домена сайта (URL)
Иногда нужно сделать полную переадресацию с одного сайта на другой. Например, сменился домен. В этом случае необходимо написать следующие четыре строчки:
Например, если вы введёте в адресной строке: olddomen.ru/cat/1, то благодаря первым двум строчкам произойдёт 301 редирект на newdomen.ru/cat/1. Ниже приведён такой же случай, но в случае если адрес сайта будет написан с www: www.domen.ru/cat/1. Возможно, вы сочтете это не обязательным, но поверьте, что третья и четвертые строчки кода также важны как для пользователей, так и для seo оптимизации, чтобы убрать дубли.
5) Редирект с http://site/yyyy/mm/dd/post/ на http://site/post/
Такой редирект будет полезен для владельцев блогов на WordPress. Указание года, месяца и числа публикации новости вовсе необязательно и создает лишнюю иерархию, которая мешает продвижению блога. Поэтому нужно использовать следующий код:
Например, с адреса http://site/2014/11/24/primerposta/ будет 301 редирект на http://site/primerposta/.
Пример с 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. Если слеша нет, то он сразу на редирект уходит. Теперь все в порядке.
Как сделать редирект URL-адресов с помощью mod_alias Apache
Самый простой способ перенаправления на серверах Apache:
Redirect 301 /old-location.html http://example.com/new-location/
Перед тем, как сделать редирект HTML, этот код нужно добавить в файл .htaccess или файл конфигурации сервера Apache. Вот синтаксис этого метода:
При необходимости можно изменить любой из этих параметров. Например, если нужно подставлять старый URL-адрес динамически, чтобы перенаправить все следующие URL-адреса:
http://example.com/old-directory/file-01.html http://example.com/old-directory/file-02.html http://example.com/old-directory/file-03.html . . .
Можно использовать RedirectMatch вместо Redirect:
RedirectMatch 301 /old-directory/file-(.*).html http://example.com/new-directory/file-$1.html
Также можно изменить код статуса с 301 (постоянный редирект) на 302 (временный редирект). Или на любой другой действительный код состояния. Ниже приведено руководство по регулярным выражениям, используемым в методе RedirectMatch:
- (.*) — соответствует любому символу (или отсутствию символа);
- . — буквально соответствует точке;
- $1 — возвращает шаблон, сопоставляемый первым (.*).
Как сделать редирект?
Делаем редирект на 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 успешно распознает многие редиректы, написанные с помощью яваскрипт.
- PHP
- Редиректы
- Примеры
LightTPD перенаправления
Для серверов, которые работают под управлением веб-сервера Lighttpd, можно сделать перенаправление, импортируя mod_redirect модуль и используя url.redirect:
server.modules = (
“mod_redirect”
)
$HTTP=~”^(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 изменяет код ответа на правильный.
Редирект ссылок через htaccess
Редирект для ссылок можно организовать не только через PHP файл, но и прописать соответствующую директиву Redirect в файле .htaccess. Его вы можете найти в корневой директории сайта. Кроме того на хостинге должен быть включен модуль mod_rewrite (в большинстве случае имеется). Синтаксис для команды следующий:
Redirect URL-path URL
Здесь:
- status : необязательное поле, определяет код возврата, допустимые значения:
- permanent (301 — документ перемещен постоянно)
- temp (302 — документ перемещен временно)
- seeother (303 — смотрите другой)
- gone (410 — убран)
- URL-path : подставная ссылка.
- URL : реальная ссылка
Таким образом для создания партнерской ссылки добавляем в .htaccess конструкцию по типу:
RewriteEngine on Redirect /gosape http://www.sape.ru/12345.php |
Открытие в новом окне
По умолчанию при нажатии на ссылку документ открывается в том же окне, что и ваша страница, т.е. ваша страница захлопнется. А это не есть хорошо. В частности для продвигаемых контентных проектов или блогов рекомендуется делать так, чтобы при нажатие на ссылку, документ открывался в новом окне или вкладке, не закрывая вашу страницу.
В этом нам поможет атрибут target
со значением «_blank»
. Тут сложного ничего нет. Вам просто надо будет вставить это внутри открывающего тега после значения атрибута href
. Давайте возьмем тот отрывок из файла lukomorye.html, где мы делали ссылку на страницу pushkin.html, только теперь пропишем этот самый атрибут. Выглядеть это должно так:
Переадресация с http на https
При переезде сайта с http на https (установка SSL-сертификата) потребуется код, который не требует дополнительных модификаций:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1
Второй метод осуществляет перенос с http://domain.ru на https://domain.ru:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^domain\.ru$
RewriteRule ^(.*)$ https://domain.ru/$1
Третий способ выполняет аналогичную функцию, но отключает перенаправление для robots.txt:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://domain.ru/$1
В 4-й версии конечным пунктом для пользователя станет https://www.domain.ru:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^domain\.ru$
RewriteRule ^(.*)$ https://www.domain.ru/$1
Позволяет сделать форвардинг с http://www.poddomen.domain.ru на https://poddomen.domain.ru:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$
RewriteRule ^(.*)$ https://poddomen.domain.ru/$1
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1
Последняя версия, дающая возможность сделать связь между http://poddomen.domain.ru на https://www.poddomen.domain.ru:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^poddomen\.domain\.ru$
RewriteRule ^(.*)$ https://www.poddomain.domain.ru/$1
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1
Простой роутинг
Если единая точка входа настроена правильно, то при заходе по любому несуществующему URL-адресу, например /test должен запуститься файл index.php.
URL текущей страницы находится в переменной $_SERVER
Теперь мы можем написать очень простой роутер, который смотрит на текущий URL и подключает соответствующий скрипт:
Внесём ещё пару доработок. Во-первых, зачастую URL-адреса должны работать вне зависимости от наличия GET-параметров, поэтому вырежем их из URI:
Кроме этого, часто требуется получить доступ к определённой части URL. Для этого разобьём URL на части по слешу:
В переменной $segments для URL /products/15 будет лежать массив вида .
Теперь мы можем легко добавить маршруты для админки:
Это самый простой вариант роутинга. Не идеальный, конечно, но и не требующий знания регулярных выражений (хотя никто не мешает их использовать) и подключения сторонних библиотек.
При хранении URL адресов в базе данных роутинг будет выглядеть примерно так (реальный код зависит от библиотеки, которую вы используете для взаимодействия с БД):
Редиректы
Редирект на .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, обращайтесь
Что такое редирект
Редирект – это перенаправление пользователя с одного интернет-адреса (URL) на другой. Поясню на примере: вбиваете в адресной строке своего браузера https://casecollector.ru, а попадаете на https://casecollector.ru. Заметили разницу?
А вот пример уже по-жестче: вводите https://partglo.ru/affiliate/10709019 . В результате открылась https://topglop.ru/freedom. Что тут происходит?! Это вообще законно?)
Еще, наверняка, многие видели ссылки вида bit.ly (например, вот такая: https://bit.ly/1oJrmXs – откроется википедия) или vk.cc. Это – так называемые, “сокращатели ссылок”. Они делают длинные некрасивые ссылки короткими.
Все приведенные примеры – это как раз и есть редирект ссылки, т.е. переброс на другой URL. Существует несколько механизмов его реализации, но об этом чуть позже
Важно понимать, что без редиректа многие необходимые вещи в сети были бы невозможны
Другой пример, когда, по какой-либо причине, меняется название доменного имени (ребрендинг, санкции к старому имени, смена владельца и др.) было бы весьма неплохо сохранить позиции сайта в поиске, тем более, что вся наработанная клиентская база будет искать ресурс по старому имени. Это уже к вопросу, как сделать редирект на другой сайт. То же касается перехода сайта на HTTPS (см. первый пример).
Такой же метод применяется и для перенаправления трафика в пределах одного ресурса. Редирект, в этом случае, используется для переброса с неактуальных на актуальные страницы сайта.
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}”)
В каких случаях используется постоянный редирект 301
-
Смена доменного имени, перенос сайта. Необходимо произвести тотальную настройку переадресации со старого адреса на новый, чтобы все без исключения запросы к old_site.ru перенаправлялись на new_site.ru.
-
Изменение написания url определенных страниц в целях SEO-продвижения, смены CMS или по иным причинам. Требуется настроить редирект с site.ru/1hdkr5 на site.ru/page_adress.
-
Перенос разделов на субдомены. Необходимо сменить адрес www.site.ru/example на example.site.ru.
-
Для аккумуляции трафика с адресов, купленных в разных доменных зонах, на один приоритетный ресурс.
-
Исключение дублирующихся страниц из индекса.
-
Склейка зеркал сайта – вариантов сайта с идентичным контентом, но разным написанием адресов: site.ru, www.site.ru, https://site1.ru и т.д. В этом случае выбирается один приоритетный домен и на него настраивается редирект со всех остальных зеркал.
-
Удаление ранее существовавшей страницы. В этом случае пользователи обычно видят ошибку 404. Большое количество таких сообщений негативно воспринимается как пользователями, так и поисковиками.
-
Для быстрого перехода пользователя на мобильную версию ресурса со смартфонов и планшетных устройств.
Авторская схема: бесплатный редирект ссылки на uCoz
Я хочу поделиться схемой, которую я применяю, когда срочно нужно что-нибудь затестить, а без редиректа не пускают. Данный способ абсолютно бесплатный и не требует наличия своего хостинга, сервера или сайта. Отличный способ, чтобы, например, сделать редирект для ВК.
Идея в том, чтобы использовать бесплатный конструктор сайтов. Я сделал свой выбор в пользу конструктора uCoz. Вы получаете в свое распоряжение доменное имя третьего уровня и место на сервере, где размещается ваш “сайт”. Сам сайт нас мало интересует, а вот возможность ручного редактирования HTML сайта – это именно то, что принесет нам радость.
Оффтоп: кстати, пока я писал эту статью случился фейл с этой схемой с uCoz и, я думал, что она больше нежизнеспособна! Но, немного поломав голову, я нашел лазейку и теперь все ОК)) Дальше расскажу, в чем суть.
ШАГ 1. Регистрация и создание сайта
Заходим на uCoz – попадаем на страницу регистрации:
Форма регистрации пользователя uCoz
Заполняем необходимые поля:
Создание нового сайта на uCoz
Панель создания нового сайта
Теперь, придумываете адрес сайта (имя домена третьего уровня) и выбираете доступные варианты бесплатных доменов от uCoz. Рекомендую создавать сайты с именами, релевантными продвигаемым офферам, чтобы ссылка вызывала больше доверия в лице потенциального клиента. Мой выбор был очевиден)):
Создали сайт для редиректа
Следуя приглашению, переходим в панель управления.
ШАГ 2. Вставка кода редиректа
Полпути пройдено! Осталось правильно внедрить код редиректа в новоиспеченный сайт, чтобы он стал выполнять свое темное дело.
После того, как откроется панель управления сайтом, переходим на вкладку “Дизайн”:
Переходим на вкладку “Дизайн”
Нам нужно найти шаблон главной страницы сайта. На вкладке “Дизайн” есть выпадающий список шаблонов, действующих на сайте. Выбираем шаблон с названием “Страницы сайта”:
Выбираем шаблон страницы для редактирования
Прежде, чем редактировать шаблон, убедитесь, что ваш сайт работает и доступен по адресу, который вы задавали. Я проверил свой сайт по адресу casecollector.usite.pro (на момент прочтения вами статьи, он может уже не работать, т.к. uCoz периодически требует подтверждения активности сайта, а я мог на это забить):
Проверка работы сайта uCoz
Так будет выглядеть код для перенаправления на JQuery:
Вставить данный код нужно в начало секции <body>, как показано ниже (в своем примере я делаю редирект на главную страницу Википедии) :
Вставляем код редиректа на JQuery
Сохраняем шаблон и проверяем свой сайт, введя адрес в браузере (напомню, у меня был casecollector.usite.pro). Если все сделали правильно, то откроется желаемая страница и вас можно поздравить).
Что перестало работать?
Рассказываю про свой эпик фейл. Можете взять на заметку при проработке альтернативных схем. Суть в следующем: раньше (на протяжении последних нескольких лет) я всегда прогонял ссылки для теста через uCoz, как описано выше. НО! Я всегда использовал HTML или JavaScript редиректы. Причем, предпочтение отдавал HTML, т.к. больше шансов на успех в случае блокировки JS в клиентском браузере.
Пока писал статью, uCoz изменили алгоритмы валидации кода и, когда я решил по старой схеме сделать переброс на HTML, то получил вот это:
Новый алгоритм валидации кода на uCoz
Самое печальное то, что написав редирект ссылки на JavaScript я получил ровно такой же результат! Причем, все мои старые ссылки на HTML продолжают работать. Изменения коснулись только нового редактора кода шаблонов.
Терять такую вкуснятину я никак не хотел, поэтому, перепробовал буквально всё. Сработал единственный метод – вставлять редирект ссылки на JQuery, как я описал в примере выше.
Срок жизни редиректа
Через некоторое время, после создания и публикации сайта uCoz вам на почту будут приходить сообщения следующего вида:
Уведомление о неактивности сайта
Это происходит потому, что uCoz мониторит ваш сайт и действия пользователей с ним и, в случае, если активности нет (подробнее читайте Условия использования), то сайт отключают.
Активности пользователей, по понятным причинам, не будет, т.к. все они перенаправляются на другой ресурс.
Выход один: следите за почтой и своевременно восстанавливайте свои сайты. Именно по этой причине, я использую данную схему только для тестов.
Заключение
Еще раз поздравляю тех, кто дочитал до конца! К сожалению, схема с uCoz перестала работать. Честно сказать – метод не самый надежный и этого стоило ожидать рано или поздно. Тем не менее, я не зря делаю акцент на редиректе. Большинство доменов CPA-сетей под фильтром у ВК. Это значит, что при переходе по такой ссылке, пользователь увидит от ВК предупреждение вида: “Ссылка на подозрительный сайт”. Чуть позже напишу, как я делаю надежные платные редиректы. Если работаете с трафиком – не забудьте ознакомиться с моим мануалом по продвижению в ВК и другими материалами блога.
С вами был Игорь Кантор. Надеюсь, что статья оказалась для вас полезной. Подписывайтесь на мой Телеграм-канал https://t.me/casecollector – впереди еще много огненного материала! Всем профита!)