Тарифы Услуги Сим-карты

Как в PHP задать редирект на другой URL до загрузки страницы? PHP редирект внешних ссылок. Редирект с задержкой и таймером обратного отсчета. Скрытие реферальных ссылок

Предположим, что вы хотите, чтобы пользователям, которые переходят на страницу https://example.com/initial.php отображалась страница https://example.com/final.php . Это можно сделать с помощью несколько методов PHP , JavaScript и HTML . В этой статье мы расскажем о каждом из методов, которые можно использовать для PHP перенаправления на другую страницу.

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

Использование функции PHP header() для редиректа URL-адреса

Если хотите добавить редирект с initial.php на final.php , можно поместить на веб-странице initial.php следующий код. Он отправляет в браузер новый заголовок location :

Здесь мы используем PHP-функцию header() , чтобы создать редирект. Нужно поместить этот код перед любым HTML или текстом. Иначе вы получите сообщение об ошибке, связанной с тем, что заголовок уже отправлен. Также можно использовать буферизацию вывода, чтобы не допустить этой ошибки отправки заголовков. В следующем примере данный способ перенаправления PHP показан в действии:

Чтобы выполнить переадресацию с помощью функции header() , функция ob_start() должна быть первой в PHP-скрипте . Благодаря этому не будут возникать ошибки заголовков.

В качестве дополнительной меры можно добавить die() или exit() сразу после редиректа заголовка, чтобы остальной код веб-страницы не выполнялся. В отдельных случаях поисковые роботы или браузеры могут не обращать внимания на указание в заголовке Location . Что таит в себе потенциальные угрозы для безопасности сайта:

Чтобы прояснить ситуацию: die() или exit() не имеют отношения к редиректам. Они используются для предотвращения выполнения остальной части кода на веб-странице.

При PHP перенаправлении на страницу рекомендуется использовать абсолютные URL-адреса при указании значения заголовка Location . Но относительные URL-адреса тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.

Вывод кода JavaScript-редиректа с помощью функции PHP echo()

Это не является чистым PHP-решением . Тем не менее, оно также эффективно. Вы можете использовать функцию PHP echo() для вывода кода JavaScript , который будет обрабатывать редирект.

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

Ниже приводится несколько примеров, в которых использованы разные методы JavaScript для редиректа с текущей страницы на другую:

Единственным недостатком этого метода перенаправления на другой сайт PHP является то, что JavaScript работает на стороне клиента. А у ваших посетителей может быть отключен JavaScript .

Использование метатегов HTML для редиректа

Также можно использовать базовый HTML для выполнения редиректа. Это может показаться непрофессиональным, но это работает. И не нужно беспокоиться о том, что в браузере отключен JavaScript или ранее была отправлена ошибка заголовков:

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

Заключение

В этой статье я рассмотрел три различных метода перенаправления с index php , а также их преимущества и недостатки. Конкретный метод, который стоит использовать, зависит от задач проекта.

Перевод статьи «How can I do a redirect to different url before page load in PHP » дружной командой проекта .

Хорошо Плохо

Главная > Программы > Apache

301 редирект - корректная переадресация через htaccess и php header

Редирект 301 (301 Permanent Redirect) используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика.

Сам я столкнулся с его необходимостью, когда после переезда своего портала из зоны com, в ru обнаружил, что Google, Яндекс и другие поисковые системы, естественно не "забывают" старого сайта (отчасти еще и из-за того, что у меня была некорректно установлена своя страница, для обработки 404 ошибки, которая возвращала код ответа 200 OK). Более того, Google за полгода оставил для нового сайта PR=0, хотя для старого он сохранился PR=4.

Тема 301 редиректа постоянно обсуждается в различных SEO-форумах, да и каждая поисковая система в своей системе помощи имеет специальные разделы. Пока разбирался я нашел перечисленные ниже варианты организации редиректа, часть из которых опробовал у себя.

301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код "301" интерпретируется как постоянное перемещение ("moved permanently").

  • Простой редирект (в файле.htaccess или httpd.conf для Apache): Redirect 301 / http://www.you.com/new.htm
    где:
    Redirect 301 - это инструкция, говорящая что страница перемещена
    / - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
    http://www.you.com/new.htm - новая страница или сайт (не забывайте поставить последний "/", если переадресация идет на сайт).

    Чтобы переадресовать только страницу, сохранив PR старой страницы:
    Redirect 301 /old/old.htm http://www.you.com/new.htm
    где:
    /old/old.htm - путь и имя старой страницы

    Аналогичный синтаксис для переадресации сайта:
    Redirect Permanent / http://www.you.com/

    Пример переадресации каталога:
    Redirect Permanent /old-directory http://www.domain.com/new-directory/

    Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):

    Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/

    Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.

  • Использование mod_rewrite (прописывается в файле.htaccess):

    Ставшая классической задача слияния имена сайта с www и без него, решается так:

    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite\.com RewriteRule ^(.*)$ http://www.yoursite.com/$1 .

    или альтернативный синтаксис:

    Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com$ RewriteRule ^(.*)$ http://www.domain.com/$1

    Обозначение означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

    Редирект старого домена на новый:

    Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1

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

    RewriteEngine on RewriteBase / RewriteRule ^rewrite\.htm$ rewrite.html

    Для замены всех.htm файлов.html файлами:

    RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.html
  • Редирект на PHP: Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:
  • Редирект на ASP
  • Редирект на ASP.NET private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.new-url.com"); }
  • Редирект на ColdFusion
  • Редирект с помощью meta refresh

    где 0 - задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

  • Редирект с помощью JavaScript

    Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout("функция", задержка).

    Например, автоматически сделать Click на кнопке "Submit" формы "searchform" через 0.1 сек после загрузки кода:

    setTimeout("document.forms["searchform"].Submit.click()", 100);

    На кнопку "Submit" можно повесить любое действие, например, открыть новый url в этом окне. Кстати такое редиректы чаще встречаются при организации Дорвеев (DorWay) - браузер Пользователя будет переадресован на другую страницу, а поисковый робот, который "не понимает" JavaScript, будет индексировать эту страницу, недоступную пользователю. На ней дорвейщики размещают текст, напичканный "нужными" ключевыми словами.

    Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:

    • location="http://www.newdomain.com";
    • document.location.href="http://www.newdomain.com";
    • window.location.reload("http://www.newdomain.com");
    • document.location.replace("http://www.newdomain.com");
    В последнем случае уже нельзя будет вернуться на страницу выполнившую переадресацию, так как ее адрес стирается из history, что нередко и нужною. Если нужна задержка по времени, можно оформить location="http://www.newdomain.com"; в виде функции и вставить ее в setTimeout("функция()", задержка_в_мсек); Редирект на JavaScrupt не является 301 редиректом и не передаст PR страницы, не сможет обеспечить ее склейку.
  • Отметим дополнительно некоторые особенности редиректов:
    • Методы редиректа с.htaccess работают только на Linux серверах, имеющих Apache с включенным модулем Mod-Rewrite.
    • Использование.htaccess создает дополнительную нагрузку на сервер Apache, более эффективно прописывать те же команды в его конфигурационном файле hpptd.conf, но, как правило, к нему нет доступа у вебмастера.
    • 301 редирект, позволяет сберечь трафик и передать PR страницы для поисковых систем (для Google точно).
    • процесс склейки и передачи PR занимает длительное времени - до нескольких месяцев и также зависит от поисковой системы, поэтому не удаляйте старую страницу или сайт, пока не произойдет окончательный перенос.
    • некоторые поисковые системы требуют для склейки сайтов дополнительных настроек, например, для Яндекса нужно дополнительно прописывать robots.txt

    Заключение. Безопасный способ редиректа старых страниц на новые или старого сайта на новый адрес, с сохранением позиций в поисковых системах, заключается в использование 301 редиректа, который также позволит вам передать старый Page Rank страницы на новый сайт.

    Как часто вам нужно переадресовать пользователя на другую страницу? Уверен, не редко. Для осуществления этой задачи используются несколько способов.

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

    На странице, с которой вы хотите перенаправить пользователя, установите следующий код:

    window.location.href = "http://www.сайт"

    Вместо http://www.сайт укажите страницу, на которую следует переадресовать пользователя. Способ не работает, если в браузере не включен javascript. Но, как показывает практика, javascript всключён почти у всех пользователей сайта. Но при этом отключён у поисковых ботов.

    Переадресация с помощью meta-тега refresh

    Воспользуемся html тегами. Тег, указывающий на время обновления страницы, выглядит так:

    Тег в таком виде заставит обновить страницу в браузере через 5 секунд, заменив адрес страницы на новый, указанный в теге.
    Но нас 5 секунд не устраивают, поэтому окончательный вариант тега будет таковым:

    < meta http-equiv = "refresh" content = "0;url=http://www.сайт" />

    Минусом переадресации тегами и javascript является то, что в случае переезда сайта, смены домена, или перемещении файлов, статья для пользователя остаётся той же, а для поисковых систем — нет. Поэтому при переезде сайта категорически нельзя использовать эти методы, так как основной сайт выпадет из результатов поиска из-за своей пустоты, а новый сайт не попадёт в результаты из-за «плагиата». Да, да, поисковые системы оценят сайт как плагиатчик. И этот сайт украл содержание с вашего предыдущего сайта. Плагиатчики значительно опускаются в результатах поиска. Не делайте ошибок.

    Переадресация средстави php

    Здесь всё просто. Нужно отправить соответствующий http заголовок

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

    Поэтому не забывайте при переносе материалов указывать нужные http заголовки.

    Переадресация средствами сервера apache (.htaccess)

    Пожалуй, самый удобный способ переадресации. Пример редиректа на новый домен:

    Таким образом мы перенаправляем запрос с файла old.htm , лежащего в корневой директории сайта, на файл rewrite.html, лежащий в директории newcategory.

    Как вы уже успели заметить (а кто не успел, у того ещё есть последний шанс), RewriteRule поддерживает регулярные выражения, что позволяет творить с переадресацией что угодно.
    Например, я делал файл.htm изображением (RewriteRule ^(.*).htm$ $1.jpg) , т.е. с адреса dog.htm браузер перекидывал меня на картинку dog.jpg. Я не хочу расписывать все возможности модуля mod_rewrite, с чьей помощью мы сейчас работали. Об этом написано немало уроков, но, если хотите, можете сами поискать дополнительную информацию об этом. (Например, на , правда, на английском языке.)

    Преимуществом этого способа является его безболезненность. То есть перенос материалов и последующая переадресация со старого адреса на новый никак не отразятся на позиции сайта в поисковых системах. Система работает так же, как и переадресация на php, за исключением того, что она не требует установленного php. Но есть и минус: переадресация через mod-rewrite нагружает сервер немного сильнее, чем такая же переадресация через php. Да и модуль mod-rewrite не всегда бывает установлен на apache. Хотя сейчас большинство хостеров и ставят его, продолжают встречаться единичные клинические случаи, когда этот модуль не установлен.

    Выбирайте способ, который вам больше подходит, и устанавливайте его на сайт!

    Быстрая навигация по этой странице:

    Если вы решили написать скрипт и сделать редирект PHP, преимущества этого шага очевидны: PHP – серверно ориентированный язык скриптов; перенаправление будет выполняться посредством скрипта на сервере, а не в браузере посетителей. Некоторые перенаправления могут быть выполнены на стороне клиента — через редирект js (то есть через JavaScript редирект).

    Это более гибкий и универсальный подход, и вы можете выполнить несколько типов редиректа в PHP, в отличие от других методов. Вот — наиболее частые виды редиректа, которые можно сделать в PHP: a) 301 редирект PHP (статус постоянного перенаправления), b) 302 редирект PHP (временный статус переадресации), с) Обновление.

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

    Заголовок языка PHP функции

    Например, предположим, вы хотите сделать редирект к этому URL http://www.somewebsite.com/target.php. В исходном PHP страницы, Вам просто следует вызвать этот скрипт редиректа:

    Попробуйте также провести этот простой эксперимент на вашем локальном хостинге:

    1) Откройте текстовый редактор и введите этот код:

    Сохраните его как targetpage.php.

    2) Откройте другой пустой текстовый файл и введите этот код:

    Сохраните его как originatingpage.php.

    3) Теперь запустите веб-браузер. В адресной строке браузера введите: http://localhost/originatingpage.php

    4) Вы заметите, что после нажатия кнопки ввода, этот URL: http://localhost/originatingpage.php делает редирект на http://localhost/targetpage.php и на targetpage.php, и вы видите слова «Hi this is codex-x».

    Одна из самых распространенных ошибок может крыться в оформлении кода html редиректа:

    Попробуйте выполнить этот эксперимент:

    Перейдите к скрипту originatingpage.php и добавьте любой HTML тег:

    header(‘Location: http://localhost/targetpage.php’);

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

    Это – ошибка редиректа