Сайт о телевидении

Сайт о телевидении

» » Два мужчины ucp php redirect. Как в PHP задать редирект на другой URL до загрузки страницы

Два мужчины ucp php redirect. Как в PHP задать редирект на другой URL до загрузки страницы

Главная > Программы > 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 страницы на новый сайт.

    Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php .

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

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

    В каких случаях может потребоваться редирект:

    • Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
    • При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
    • Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
    • В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.
    Особенности редиректа на php

    В отличие от других языков php обладает некоторыми преимуществами в реализации редиректа:

    • Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
    • Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
    • Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.

    Для редиректа в php используется функция header() . Она применяется для отправки заголовка http . Ее синтаксис:

    void header (string $string [, bool $replace = true [, int $http_response_code ]])

    Принимаемые функцией аргументы:


    • string $string – строка заголовка;

    Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с "HTTP/". Другой тип вместе с заголовком передает клиентскому браузеру код состояния (REDIRECT 302). Этот аргумент начинается с "Location:"


    • bool $replace – является необязательным атрибутом типа bool . Отвечает за переопределение предыдущего заголовка. Если будет задано true , то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false , то перезапись заголовка не состоится. По умолчанию, задано значение true ;
    • http_response_code – аргумент принудительно устанавливает код ответа HTTP . Установка кода пройдет успешно при условии, что аргумент string не будет пустым.

    Код состояния HTTP представляет собой часть верхней строки ответа сервера. Код состоит из трех цифр, после которых идет поясняющая надпись на английском языке. Первая цифра отвечает за класс состояния. Редиректу соответствуют коды от 300 до 307. Их полное описание можно найти в соответствующей технической документации.

    При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html :


    Применение редиректа header()

    Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php , а другой redirect2.php . Внутри первого разместим вызов функции в следующем формате:

    В другом файле помещаем строку:

    echo "Привет! Вы находитесь в файле redirect2.php";


    Еще несколько практических примеров использования редиректа на php :

    • Принудительная передача кода состояния http – при использовании первого аргумента функции header() типа «location » по умолчанию в заголовок передается код состояния «302 » (временно перемещен ). Это может стать проблемой при переносе ресурса на другое доменное имя. В поисковиках такое временное перенаправление может затянуться. Ведь поисковик постоянно анализирует код состояния. А в нем записано «временно перемещен ». Пример принудительной перезаписи кода состояния «302 » на «301 » (постоянно перемещен ):

    Также перезапись возможна в два этапа. Первая строка производит перезапись кода состояния, а вторая перенаправляет на новый адрес:

    • Использование редиректа внешних ссылок для перенаправления в зависимости от роли пользователя. Роль определяется во время процедуры аутентификации. Значение для обработки записывается в переменную $who :

    • Упрощенный практический пример реализации редиректа внешней ссылки – клик по ссылке ведет на страницу php . Отсюда пользователя через 5 секунд перекидывает на Рамблер. Код html :

    Нажми меня

    Код файла redirect3.php :


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

    Last modified on February 25th, 2017 by Vincy.

    PHP redirect mechanism is used to navigate the user from one page to another without clicking any hyperlinks. This will be helpful in such circumstances where the redirect should be done in the background. For example, when the user is accessing payment gateway, the redirect should automatically be taken place to notify URL using PHP script.

    PHP provides predefined function, named header(),for URL redirection. Using this header() function, we need to send location header by specifying URL to which the page should be redirected.

    Unlike where there are several ways to handle URL redirect works based on the browser, PHP avoids such confusion and have header() function create the same effect in all browsers. For that only, we have concluded with JavaScript redirect article that server side redirect is preferable.

    PHP Redirect Syntax header("Location: target-url ");

    In the above syntax of PHP redirect, we need to replace with a valid URL to which we want to move. We can specify either absolute URL or relative URL for this location header. If we specify relative URL, it will search for the page in our domain where we exist.

    Note: Before specifying page URL for location header, we should make sure that the page exists.

    Caution before Redirect

    Before executing PHP redirect, we should ensure about, no output is sent to the browser before the line where we call the header() function. For example,

    Echo "PHP Redirect"; header("Location: сайт");

    This script will display the following warning notice to the browser.

    Warning: Cannot modify header information - headers already sent by (...

    It is not only applicable for header function, rather for all the PHP functions like set_cookie(), session_start() and etc., whatever can modify the header. For that, we should remove all content which will stop sending location header to the browser.

    Possible Ways of Sending Output
    • HTML content like text or tags.
    • Unnecessary white spaces before PHP delimiters.
    • PHP error or warning notices that occur before calling redirect.
    • PHP , like, echo(), print().
    Safety Measures from output being Sent before PHP Redirect
    • Since HTML content should be sent before the redirect, we can separate PHP logic from HTML content.
    • For being in the safety side we can put exit command after redirect statement of PHP file. For example, header("Location: сайт"); exit;
    • We can enable PHP output buffering to stop sending output to the browser and stored into a buffer instead.

    (PHP 4, PHP 5, PHP 7)

    header — Send a raw HTTP header

    Description

    header (string $header [, bool $replace = TRUE [, int $http_response_code ]]) : void

    header() is used to send a raw HTTP header. See the » HTTP/1.1 specification for more information on HTTP headers.

    Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include , or require , functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.


    Parameters

    The header string.

    There are two special-case header calls. The first is a header that starts with the string "HTTP/ " (case is not significant), which will be used to figure out the HTTP status code to send. For example, if you have configured Apache to use a PHP script to handle requests for missing files (using the ErrorDocument directive), you may want to make sure that your script generates the proper status code.

    The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.

    Replace

    The optional replace parameter indicates whether the header should replace a previous similar header, or add a second header of the same type. By default it will replace, but if you pass in FALSE as the second argument you can force multiple headers of the same type. For example:

    Http_response_code

    Forces the HTTP response code to the specified value. Note that this parameter only has an effect if the header is not empty.

    Return Values

    No value is returned.

    Changelog Version Description
    5.1.2 This function now prevents more than one header to be sent at once as a protection against header injection attacks.
    Examples

    Example #1 Download dialog

    If you want the user to be prompted to save the data you are sending, such as a generated PDF file, you can use the » Content-Disposition header to supply a recommended filename and force the browser to display the save dialog.