Разбираем все виды редиректов (html, js, php, htaccess)
Примеры редиректов или же перенаправлений на другую страницу.
Редирект в HTML
// Обновить страницу через 5 секунд:
<meta http-equiv="refresh" content="5">
// Перенаправить на https://www.google.com через 5 секунд:
<meta http-equiv="refresh" content="5; url=https://www.google.com">
// Перенаправьте на https://www.google.com немедленно:
<meta http-equiv="refresh" content="0; url=https://www.google.com">
Редирект в JavaScript
Метод replace()
позволяет заменить одну страницу другой таким образом, что это замещение не будет отражено в истории просмотра HTML-страниц (history) браузера
location.replace("https://www.google.com");
document.location.replace("https://www.google.com");
Метод reload()
полностью моделирует поведение браузера при нажатии на кнопку reload
в панели инструментов. Если вызывать метод без аргумента или указать его равным true
, то браузер проверит время последней модификации документа и загрузит его либо из кеша (если документ не был модифицирован), либо с сервера.
Такое поведение соответствует нажатию на кнопку reload
. Если в качестве аргумента указать false
, то браузер перезагрузит текущий документ с сервера. Такое поведение соответствует одновременному нажатию на reload
и кнопки клавиатуры shift (reload+shift)
.
window.location.reload("https://www.google.com");
Следующие примеры тоже перенаправят на google:
location="https://www.google.com";
document.location.href="https://www.google.com";
С помощью функции setTimeout
возможно реализовать задержку переадресации перед выполнением редиректа (в примере - 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>
Редирект в PHP
В php есть функция header()
, которая разрешает не только подменять стандартные заголовки, но и добавлять новые.
Синтаксис:
// string - полностью сформированная строка заголовка, который необходимо добавить (без завершающего перевода строки "\n")
// replace указывает, нужно ли заменять заголовки с одинаковыми именами (true), или же добавлять в конец (false)
// http_response_code указывает код http-ответа (300, 301, 302 и т.д.)
void header ( string string [, bool replace = true [, int http_response_code]] );
Примеры использования:
header( 'Refresh: 0; url=/error404.html' ); // переадресовать на страницу ошибки немедленно (без задержки)
header( 'Refresh: 5; url=https://www.google.com/' ); // переадресовать на главную страницу Рамблера через 5 секунд после загрузки страницы.
header( 'Location: /', true, 307 ); // перебросить на главную страницу сайта с использованием 307 редиректа.
header( 'Location: /article/page.htm', true, 303 ); // с помощью 303 редиректа переадресовать на внутреннюю страницу сайта.
header( 'Location: http://google.ru/search?q=redirect' ); // с помощью 302 редиректа переадресовывать на поиск в гугле слова redirect (При использовании Location без указания кода редиректа, по умолчанию используется 302-й).
header( 'Location: http://yandex.ru/yandsearch?text=redirect', true, 301 ); // сделать переадресацию с помощью 301 редиректа на поиск в Яндексе слова redirect.
Редирект HTML в PHP:
<?php
echo '<meta http-equiv="refresh" content="5;URL=https://ida-freewares.ru">';
Второй вариант, аналогичный по смыслу, но может быть полезным, если установка кода и редирект должны осуществляться в разных местах:
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://site.com/');
Первая строка указывает код http, а вторая, собственно, задает адрес. В большинстве случаев, проблем не возникнет. Однако, если у вас используется режим FastCGI
, то вместо "HTTP/1.1 301 Moved Permanently"
может потребоваться написать "Status: 301 Moved Permanently"
.
Редирект в .htaccess (RewriteEngine)
Синтаксис:
Redirect [status] URL-path URL-to-redirect
Необязательный параметр status
- это три цифры - код редиректа (например, 301). Если не указан, то по умолчанию подставляется 302.
URL-path
- часть запрашиваемого пользователем (или поисковиком) адреса, которая должна обязательно начинаться со слеша (/)
URL-to-redirect
- полный адрес сайта (и, возможно, часть пути), на который будет осуществляться редирект. Должен быть вида http://site.ru/ - то есть обязательно должен присутствовать протокол (http://) и закрывающий адрес сайта слеш (/).
Если URL-path
заканчивается не слешем, то редирект будет срабатывать только в случае точного совпадения запрошенного пользователем адреса и URL-path
.
Если URL-path
заканчивается слешем, то редирект сработает не только для указанного адреса, но и для всех, которые начинаются на указанный. А к URL-to-redirect
будет добавлена часть адреса, следующая за последним указанным слешем в URL-path
.
Действие директивы RedirectMatch
аналогично Redirect
, но в параметрах URL-regexp и URL-to-redirect можно использовать регулярные выражения.
// должно быть включено (on) для работы RewriteRule
RewriteEngine on
RewriteRule URL-regexp URL-to-redirect [L,R[=status]]
У директивы RewriteRule
более широкий спектр применения. Который, в числе прочих возможностей, разрешает ее использования и для редиректа - с указанием в конце строки в квадратных скобках [ ]
флагов L
(выполнить немедленно) и R
(редирект).
Примеры использования:
Redirect / http://yandex.ru/yandsearch?text= # Выполнится 302 редирект (по умолчанию) на поиск в Яндексе символов, введенных в адресную строку после названия Вашего сайта.
# То есть если посетитель введет http://ваш_сайт.ru/page, то браузер его перенаправит на http://yandex.ru/yandsearch?text=page
Redirect 301 /hello.html http://google.ru/search?q=bye # В случае перехода на страницу http://ваш_сайт.ru/hello.html выполнится 301 редирект на поиск в Гугле фразы "bye".
RedirectMatch (.*)\.jpg$ http://хостинг_для_картинок$1.jpg # "Временно" (по умолчанию действует 302 редирект) переадресовываем все запросы jpeg-картинок на какой-либо бесплатный хостинг
# или то же самое, но с применением RewriteRule:
RewriteEngine on
RewriteRule (.*)\.jpg$ http://хостинг_для_картинок$1.jpg [L,R]
Редирект в Yii2
$this->registerMetaTag(['http-equiv' =>'Refresh', 'content' => '5; http://google.ru/']);
Предыдущая запись
Composer требует token githubСледующая запись
NppExec - плагин для запуска PHP кода в редакторе Notepad++