Как мне сделать редирект в PHP?

1263

Можно ли перенаправить пользователя на другую страницу с помощью PHP?

Скажем, пользователь переходит к нему, www.example.com/page.phpи я хочу перенаправить его www.example.com/index.php, как бы я сделал это без использования метаобновления? Является ли это возможным?

Это может даже защитить мои страницы от посторонних пользователей.

Сэм
источник
Вы можете обновить заголовок в PHP: header
Зак Маррапезе
11
@Sam: так же, как боковой узел, не реализуйте никакой вид protection from unauthorized usersперенаправления; это не так, как надо делать;)
Strae
7
@Strae Что не так с защитой страниц с помощью перенаправления? Тогда как лучше?
6
@PravindaAmarathunga редирект является одним из элементов, но не единственным. Просто убедитесь, что защищенные элементы вообще не выводятся для неавторизованных пользователей; Перенаправление браузера может быть отключено на стороне клиента, например: если браузер не выполняет перенаправление, и исходная страница выводится в обычном режиме, что бы пользователь увидел? CMS обычно выполняет перенаправление и не распечатывает защищенные элементы, заменяя обычный вывод сообщением вежливости.
Strae
@PravindaAmarathunga проверьте ссылку из ответа Маркуса
Strae

Ответы:

1700

Резюме существующих ответов плюс мои собственные два цента:

1. Основной ответ

Вы можете использовать header()функцию для отправки нового HTTP-заголовка, но его необходимо отправить в браузер перед любым HTML или текстом (например, перед <!DOCTYPE ...>объявлением).

header('Location: '.$newURL);

2. Важные детали

умереть () или выйти ()

header("Location: http://example.com/myOtherPage.php");
die();

Почему вы должны использовать die()или exit(): The Daily WTF

Абсолютный или относительный URL

С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231, который заменил старый RFC 2616 , где допускались только абсолютные URL.

Коды состояния

Заголовок PHP "Location" все еще использует код HTTP 302- direct, но это не тот, который вы должны использовать. Вы должны рассмотреть либо 301 (постоянное перенаправление) или 303 (другое).

Примечание: W3C упоминает, что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1. В настоящее время все используемые браузеры являются пользовательскими агентами HTTP / 1.1. Это не так для многих других пользовательских агентов, таких как пауки и роботы.

3. Документация

Заголовки HTTP и header()функция в PHP

4. Альтернативы

Вы можете использовать альтернативный метод, для http_redirect($url);которого требуется установить пакет PECL pecl .

5. Вспомогательные функции

Эта функция не включает код состояния 303:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Это более гибко:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Обходной путь

Как уже упоминалось, header()перенаправления работают только до того, как что-либо записано. Обычно они терпят неудачу, если вызываются в середине HTML- вывода. Тогда вы можете использовать обходной путь HTML-заголовка (не очень профессиональный!), Например:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

Или даже редирект JavaScript.

window.location.replace("http://example.com/");
markus
источник
5
Некоторые проблемы с этим ответом: 303 может не быть «правильным» кодом состояния. 301 может быть желательным для Google, например. Во-вторых, header('Location: '.$newURL);должно быть до того, как какой-либо HTML (или текст) будет передан в браузер, иначе он не будет работать правильно.
Чак Ле Бат
6
К сожалению, ежедневная история WTF является обычной. В любом случае, проблема не в том, что пропал, а в плохом дизайне. Насильственное прекращение процесса неправильно в 99,9% случаев. Распространенное, более чистое решение (в любом случае, не мое любимое) - создать исключение RedirectionException и поймать его в точке входа приложения. После этого у вас могут быть все ваши звонки "после *" (журналы / закрытие соединений / что
угодно
4
http-equiv="Location"Не поддерживается всеми браузерами. Вы должны использовать refreshвместо этого! <meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002
71
Никогда не выпускайте 301, если вы не имеете это в виду . 301 означает постоянный, а постоянный означает постоянный , то есть он будет кэшироваться пользовательскими агентами, что означает долгие, наполненные кофеином ночи, уставившись на журналы приложений, гадающие, не сходите ли вы с ума, потому что вы клянетесь, что какая-то страница должна была быть вызвана или обновлена, и вы клянетесь Богу это работает на вашей машине, но не на клиенте. Если вам абсолютно необходимо вызвать 301, установите для ресурса максимальный контроль кэша. У вас нет бесконечной мудрости, и вы не должны вести себя так, как вы.
Madumlao
2
Но есть ли причина использовать die вместо выхода? выход кажется чище и уместнее.
ars265
122

Используйте header()функцию для отправки заголовка HTTPLocation :

header('Location: '.$newURL);

Вопреки тому, что некоторые думают, не die()имеет ничего общего с перенаправлением. Используйте его, только если вы хотите перенаправить вместо обычного выполнения.

Файл example.php :

<?php
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt', 'a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
    fclose($fh);
?>

Результат трех казней:

bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

Возобновление - обязательно die()/ exit()это некая городская легенда, которая не имеет ничего общего с реальным PHP. Это не имеет никакого отношения к клиенту, "уважающему" Location:заголовок. Отправка заголовка не останавливает выполнение PHP независимо от используемого клиента.

Vartec
источник
8
die () или exit () предназначены для клиентов, которые не уважают заголовок «Location: ...»
clawr
12
@clawr: Нет, exit()запрещает странице показывать остальное содержимое (например, страницы с ограниченным доступом). vartec прав, он не имеет ничего общего с заголовком HTTP Location и вам не нужен exit. Я решил включить его в свой ответ, потому что для тех, кто не знает, как сделать простое перенаправление, можно с осторожностью играть в безопасности, а не реализовывать простой, но важный шаг, чтобы он мог воспользоваться преимуществами продвинутого процесса. контроль.
Аликс Аксель
1
Но браузеры, которые уважают заголовок, покинут страницу и закроют соединение, пока ваш скрипт еще выполняется. Это совершенно плохо. PHP продолжит работу со сценарием в течение некоторого времени (вот почему ваш код выполняется), но может случайно прервать его в середине выполнения, оставив вещи испорченными. Вызов ignore_user_abort () предотвратит это, но, честно говоря, это того не стоит. Просто продолжайте писать что-то на HTML (хотя, вероятно, бесполезно), но не делайте вещи, которые пишут на диск или базу данных после заголовка ('Location:'); Запишите на диск перед перенаправлением, если это возможно. [Также: URL должен быть абсолютным.]
FrancescoMM
Есть ли способ перенаправить, прежде чем браузер обнаружит протокол HTTP? причина, по которой мне нужно перенаправить, заключается в том, что я не могу получить достаточно SSL-сертификатов для всех моих доменов. я бы использовал .htaccessдля перенаправления, но мне нужен способ каким-то образом передать, какой домен перенаправлен в окончательный домен?
старик
109
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

Не забудьте умереть () / выход ()!

Аликс Аксель
источник
6
И не забывайте буферизацию вывода, иначе вы получите «Заголовки уже отправлены».
Kuroki Kaze
8
... и не забудьте распечатать somthign вроде «вы будете перенаправлены на $ nepage через $ n секунд, нажмите здесь ссылку $, если перенаправление не произойдет». Некоторые более широкие и некоторые настройки браузера могут потерпеть неудачу при перенаправлении.
Strae
3
@DaNieL: этот тип перенаправления не займет $ n секунд. Это произойдет мгновенно, если это вообще произойдет, и любой соответствующий браузер должен справиться с этим. Я думаю, что вы думаете о перенаправлениях "meta refresh", которые люди используют, когда они не знают ничего лучше.
rmeador
1
@rmeador ... Для старых и специализированных браузеров. Сначала вы должны сделать свой заголовок Location, если в случае неудачи есть мета-перенаправление с «вы будете перенаправлены на страницу через x секунд» со ссылкой в ​​случае сбоя мета-перенаправления. Это правильный и надежный способ сделать перенаправление.
Эндрю Мур
3
Эндрю: как HTTP-браузер может не уважать?
vartec
102

Вывод JavaScript из PHP с помощью echo, который сделает эту работу.

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

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

Подробнее о буферизации (преимущества)

Что такое выходная буферизация?

Хаммад хан
источник
2
Простой и точный ответ! Отлично подходит для простого перенаправления страниц!
Статис Андроникос
И таким образом вы не столкнетесь с общей Cannot modify header information - headers already sent byошибкой.
Кай Ноак
1
@hmd, что если javascript отключен?
Истак Ахмед
@IstiaqueAhmed javascript почти всегда включен в наши дни, но если он отключен, вы можете использовать буфер PHP. Этот ТАК вопрос отвечает на это. Если вы используете PHP Buffering, то вам не нужен этот метод, я думаю.
Хаммад Хан
Ложь, вы можете (и должны) делать это в PHP даже без буферизации: на правильно оформленной странице вся соответствующая обработка PHP должна выполняться до того, как какой-либо HTML-контент будет отправлен пользователю. Таким образом, PHP перенаправления будут работать нормально.
МестреЛион
91

1. Используя функцию заголовка с exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

но если вы используете функцию заголовка, то иногда вы получите «предупреждение, как заголовок уже отправлен» для разрешения, которое не выводится или не выводится перед отправкой заголовков или вы можете просто использовать die()или exit()после функции заголовка.

2. Без заголовка

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

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

3. Использование функции заголовка с ob_start()иob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>
Джунед Ансари
источник
Работай как шарм. Я использую <? Php echo "<script> location.href = ' google.fr /' ; </script >"; ?> Чтобы проверить это, и он сделал то, что я хотел
DoctorDroid Гаити
1
Второе решение не будет работать с отключенным JS.
Тайни
55

Большинство из этих ответов забывают очень важный шаг!

header("Location: myOtherPage.php");
die();

Выход из этой жизненно важной второй линии может привести к тому, что вы попадете на The Daily WTF . Проблема заключается в том, что браузеры не должны учитывать заголовки, которые возвращает ваша страница, поэтому при игнорировании заголовков остальная часть страницы будет выполняться без перенаправления.

nickf
источник
1
Как насчет того, чтобы дать какой-то вывод пользователю перед тем, как убить скрипт? Вы знаете, люди любят знать, что происходит в ...
Strae
3
вы предполагаете, что скрипт не имеет ничего общего, кроме перенаправления. Что может быть совсем не так.
vartec
13
@DaNieL: измени его, чтобы умереть («Хватит игнорировать мои заголовки!»)
nickf
3
Мне понравилось то простое объяснение, которое die();вы дали - если вы этого не сделаете, пользователь может на мгновение увидеть всю страницу, если вы ее используете; пользователь будет перенаправлен, и никакой временный сбой контента не покажет + 1
TheBlackBenzKid
После отправки заголовка может возникнуть полезная активность, активность, которая ничего не отправляет в браузер, но регистрирует активность или завершает запись транзакций. По этой причине необходимость в die / exit зависит от сценария.
DanAllen
28

Использование:

<?php header('Location: another-php-file.php'); exit(); ?>

Или, если вы уже открыли теги PHP, используйте это:

header('Location: another-php-file.php'); exit();

Вы также можете перенаправить на внешние страницы, например:

header('Location: https://www.google.com'); exit();

Убедитесь, что вы включаете exit()или включаете die().

Джейк
источник
25

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

<?php
    session_start();

    if (!isset( $_SESSION["valid_user"]))
    {
        header("location:../");
        exit();
    }

    // Page goes here
?>

http://php.net/manual/en/reserved.variables.session.php .

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

Итак, я добавил доступ к журналу для IP-адреса и пользовательских сессий в текстовом файле, потому что я не хочу беспокоить мою базу данных.

Asuquo12
источник
19

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

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302
Люк
источник
16

header( 'Location: http://www.yoursite.com/new_page.html' );

Даниэль А. Уайт
источник
Есть ли способ перенаправить, прежде чем браузер обнаружит протокол HTTP? причина, по которой мне нужно перенаправить, заключается в том, что я не могу получить достаточно SSL-сертификатов для всех моих доменов. я бы использовал .htaccessдля перенаправления, но мне нужен способ каким-то образом передать, какой домен перенаправлен в окончательный домен?
старик
16

Используйте следующий код:

header("Location: /index.php");
exit(0);   
joan16v
источник
14

Я уже ответил на этот вопрос, но я сделаю это снова, поскольку тем временем я узнал, что есть особые случаи, если вы работаете в CLI (перенаправление не может произойти и, следовательно, не должно exit()) или если ваш веб-сервер работает запуск PHP как (F) CGI ( Statusдля правильного перенаправления требуется предварительно установленный заголовок).

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // If using sessions
            {
                session_regenerate_id(true); // Avoids session fixation attacks
                session_write_close(); // Avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

Я также обработал вопрос о поддержке различных кодов HTTP перенаправления ( 301, 302, 303и 307), так как он был рассмотрен в комментариях моего предыдущего ответа. Вот описания:

  • 301 - Перемещено навсегда
  • 302 - найдено
  • 303 - Смотрите Другое
  • 307 - Временное перенаправление (HTTP / 1.1)
Аликс Аксель
источник
11

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

<?php
    header('Location: mypage.php');
?>

В данном случае mypage.phpэто адрес страницы, на которую вы хотите перенаправить посетителей. Этот адрес может быть абсолютным и может также включать параметры в этом формате:mypage.php?param1=val1&m2=val2)

Относительный / Абсолютный Путь

При работе с относительными или абсолютными путями, идеально выбрать абсолютный путь от корня сервера (DOCUMENT_ROOT). Используйте следующий формат:

<?php
    header('Location: /directory/mypage.php');
?>

Если целевая страница находится на другом сервере, вы включаете полный URL:

<?php
    header('Location: http://www.ccm.net/forum/');
?>

Заголовки HTTP

Согласно протоколу HTTP, заголовки HTTP должны отправляться beforeлюбым типом контента. Это означает, что никакие символы никогда не должны отправляться перед заголовком - даже пустое место!

Временные / постоянные перенаправления

По умолчанию тип перенаправления, представленный выше, является временным. Это означает, что поисковые системы, такие как Google Search, не будут учитывать перенаправление при индексации.

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

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: new_address');
?>

Например, эта страница имеет следующий код:

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: /pc/imprimante.php3');
    exit();
?>

Когда вы нажимаете на ссылку выше, вы автоматически перенаправляетесь на эту страницу. Более того, это постоянное перенаправление (статус: 301 перемещен навсегда). Таким образом, если вы введете первый URL в Google, вы будете автоматически перенаправлены на вторую, перенаправленную ссылку.

Интерпретация PHP-кода

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

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: address');
    exit();
?>
звезда
источник
Почему (ближе к концу второго абзаца)? Вы имеете в виду &paraвместо этого (так что все читается mypage.php?param1=val1&param2=val2))? (HTML - объект пункт ) является «¶» - возможно , какая - то внешняя программа сделала преобразование?).
Питер Мортенсен
9

Использование:

<?php
    header('Location: redirectpage.php');
    header('Location: redirectpage.php');
    exit();
    echo "<script>location.href='redirectpage.php';</script>";
?>

Это обычное и нормальное перенаправление PHP, но вы можете сделать страницу перенаправления за несколько секунд ожидания с помощью приведенного ниже кода:

<?php
    header('refresh:5;url=redirectpage.php '); // Note: here 5 means 5 seconds wait for redirect.
?>
Обайдул Хак
источник
7

Накануне семантической паутины правильность - это то, что нужно учитывать. К сожалению, PHP-заголовок "Location" все еще использует код HTTP 302- directirect, который, строго говоря, не самый лучший для перенаправления. Вместо этого он должен использовать 303 .

W3C достаточно любезен, чтобы упомянуть, что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1», что в настоящее время не означает отсутствие браузера. Итак, 302 - это реликвия, которая не должна использоваться.

... или вы можете просто игнорировать это, как и все остальные ...

Хенрик Пол
источник
7

Вы можете использовать некоторые методы JavaScript, как показано ниже

  1. self.location="http://www.example.com/index.php";

  2. window.location.href="http://www.example.com/index.php";

  3. document.location.href = 'http://www.example.com/index.php';

  4. window.location.replace("http://www.example.com/index.php");

Викрам Пот
источник
Javascript работает на клиенте, который может или не может быть то, что вы ищете.
Чарви
7

Да, вы можете использовать функцию header () ,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

Кроме того, лучше всего вызывать функцию exit () сразу после header()функции, чтобы избежать выполнения приведенного ниже кода.

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

Casper
источник
6

Как и другие здесь сказали, отправив заголовок местоположения с:

header( "Location: http://www.mywebsite.com/otherpage.php" );

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

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

казарка
источник
but you need to do it before you've sent any other output to the browser. Потрясающие!! Я искал минуты, почему я продолжал получать заголовки уже отправленной ошибки. +1 !!
Джош
В более общем смысле, вы имеете / полностью останавливаете свой скрипт /. die()это только один из способов сделать это.
MauganRa
6

Вот мои мысли:

ИМХО, лучший способ перенаправить входящий запрос - использовать заголовки местоположения

<?php
    header("Location: /index.php");
?>

После выполнения этого оператора и отправки вывода браузер начнет перенаправлять пользователя. Однако убедитесь, что перед отправкой заголовков не было никакого вывода (никакого echo / var_dump), иначе это приведет к ошибкам.

Хотя это быстрый и грязный способ достичь того, о чем изначально просили, в конечном итоге это окажется катастрофой для SEO, так как этот вид перенаправления всегда интерпретируется как перенаправление 301/302, следовательно, поисковые системы всегда будут видеть ваш индексная страница как перенаправленная страница, а не как целевая страница / главная страница.

Следовательно, это повлияет на настройки SEO сайта.

Бхаскар Праманик
источник
1
exit () должен использоваться сразу после заголовка ()
EKanadily
@docesam .. согласовано .. exit () должен быть вызван сразу после вызова header (). Однако я чувствую, что если после этого оператора header () больше нет вывода в браузер, exit () может и не понадобиться - только мое мнение
Бхаскар Праманик
да, но вы должны это объяснить, потому что кто-то может скопировать вашу строку кода в свой сценарий, и это может привести к тому, что вы долго будете кружить вокруг себя, выясняя, что пошло не так.
EKanadily
1
@BhaskarPramanik представьте, что вам нужно быстро запереть дверь, но затем вы должны снова потянуть / толкнуть / разбить ее, чтобы убедиться, что она уже заперта или нет ..
aswzen
5

Лучший способ перенаправить с помощью PHP - следующий код ...

 header("Location: /index.php");

Убедитесь, что код не будет работать после

header("Location: /index.php");

Весь код должен быть выполнен перед строкой выше.

Предположим,

Дело 1:

echo "I am a web developer";
header("Location: /index.php");

Он будет правильно перенаправлен в местоположение (index.php).

Случай 2:

return $something;
header("Location: /index.php");

Приведенный выше код не будет перенаправлять в местоположение (index.php).

sabuz
источник
Уже есть ответ с 1085, который содержит информацию, которую вы предоставляете, а также многое другое.
Патрик
5

Да, можно использовать PHP. Мы перенаправим на другую страницу.

Попробуйте следующий код:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>
Бхаргав Чудасама
источник
4

1. Использование headerвстроенной функции PHP

а) Простой редирект без параметров

<?php
   header('Location: index.php');
?>

б) Перенаправление с параметрами GET

<?php
      $id = 2;
      header("Location: index.php?id=$id&msg=succesfully redirect");
  ?>

2. Перенаправить с помощью JavaScript в PHP

а) Простой редирект без параметров

<?php
     echo "<script>location.href='index.php';</script>";
 ?>

б) Перенаправление с параметрами GET

<?php
     $id = 2;
     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
   ?>
Шаан Ансари
источник
Бит javascript как-то был единственной вещью, которая работала на финальном хостинге сайта; Я считаю, что это вопрос кеширования, но с этим я решил это сразу.
cdsaenz
3

Мы можем сделать это двумя способами:

  1. Когда пользователь заходит на https://bskud.com/PINCODE/BIHAR/index.php, затем перенаправляет на https://bskud.com/PINCODE/BIHAR.php

    По приведенному ниже PHP-коду

    <?php
        header("Location: https://bskud.com/PINCODE/BIHAR.php");
        exit;
    ?>

    Сохраните приведенный выше код в https://bskud.com/PINCODE/BIHAR/index.php

  2. Если какое-либо условие выполнено, перенаправьте на другую страницу:

    <?php
        $myVar = "bskud";
        if ($myVar == "bskud") {
    ?>
    
    <script> window.location.href="https://bskud.com";  </script>
    
    <?php
        }
        else {
            echo "<b>Check the website name again</b>";
        }
    ?>
Кавита Шарма
источник
Что это? Пожалуйста, не используйте ссылки на ваш собственный сайт. А во втором примере используется перенаправление JavaScript, а не header()функция PHP .
Сценарист
2

Использование:

<?php
    $url = "targetpage"
    function redirect$url(){
        if (headers_sent()) == false{
            echo '<script>window.location.href="' . $url . '";</script>';
        }
    }
?>
Джошуа Чарльз Пиквелл
источник
1
Не могли бы вы объяснить функцию вашего кода? Ваш ответ был помечен из-за его длины и содержания.
www139
2

Есть несколько способов сделать это, но если вы предпочитаете php, я бы рекомендовал использовать эту header()функцию.

В принципе

$your_target_url = www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

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

Давайте попробуем, проверив уровень пользователя.

Итак, предположим, что вы сохранили уровень полномочий пользователя в сеансе, который называется u_auth.

в function.php

<?php
    function authRedirect($get_auth_level,
                          $required_level,
                          $if_fail_link = www.example.com/index.php”){
        if ($get_auth_level != $required_level){
            header(location : $if_fail_link);
            return false;
            exit();
        }
        else{
            return true;
        }
     }

     . . .

Затем вы будете вызывать функцию для каждой страницы, которую вы хотите аутентифицировать.

Как и на page.phpлюбой другой странице.

<?php

    // page.php

    require function.php

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, www.someotherplace.com/somepage.php”);

    . . .

Ссылки;

Пир Джеймс
источник
2

Мне нравится вид перенаправления с течением времени.

<?php

header("Refresh: 5;url=índex.php");
PauloBoaventura
источник
2

Использование функции заголовка для маршрутизации

<?php
     header('Location: B.php');
     exit();
?>

Предположим, что мы хотим направить файл A.php в B.php, чем мы должны воспользоваться помощью <button>или <a>. Давайте посмотрим на пример

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>
Мехеди Абдулла
источник
Можете ли вы предоставить точное решение или хорошее?
Мехеди Абдулла
Уже есть много решений. Ваше решение смешало HTML и PHP без тегов PHP. Во-вторых, вы отправляете заголовок после печати html-кода, чтобы он не работал. И названия файлов примеров плохие. Вы не должны называть их A.php и B.php. Я знаю, что это только пример, но все же вы должны заботиться о соглашении об именах.
Тайни
1

Если вы работаете на Apache, вы также можете использовать .htaccess для перенаправления.

Redirect 301 / http://new-site.com/
michal.jakubeczy
источник
1

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

ob_start();
header("Location: " . $website);
ob_end_flush();
Дорук Аяр
источник
1
exit () должен использоваться сразу после header (). Кроме того, буферизация была автоматически включена по умолчанию в течение некоторого времени.
EKanadily
0

Попробуй это

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
Shareque
источник