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

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

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

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

20.04.2009 14:13:22
Вы можете обновить заголовок в PHP: header
Zack Marrapese 20.04.2009 14:14:27
@Sam: так же, как боковой узел, не реализуйте никакой protection from unauthorized usersпереадресации; это не так, как надо делать;)
Strae 27.05.2011 13:26:39
@Strae Что не так с защитой страниц с помощью перенаправления? Тогда как лучше?
user1899812 16.08.2013 03:06:17
@PravindaAmarathunga редирект является одним из элементов, но не единственным. Просто убедитесь, что защищенные элементы вообще не выводятся для неавторизованных пользователей; Перенаправление браузера может быть отключено на стороне клиента, например: если браузер не выполняет перенаправление и исходная страница выводится в обычном режиме, что бы пользователь увидел? CMS обычно выполняет перенаправление и не распечатывает защищенные элементы, заменяя обычный вывод сообщением вежливости.
Strae 16.08.2013 22:23:10
@PravindaAmarathunga проверьте ссылку из ответа Маркуса
Strae 16.08.2013 22:27:09
30 ОТВЕТОВ

Используйте 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 независимо от используемого клиента.

120
18.02.2019 07:01:14
die () или exit () предназначены для клиентов, которые не уважают заголовок «Location: ...»
clawr 21.04.2009 00:59:38
@clawr: Нет, exit()запрещает показывать на странице оставшееся содержимое (например, страницы с ограниченным доступом). vartec прав, он не имеет ничего общего с заголовком HTTP Location и вам не нужен exit. Я решил включить его в свой ответ, потому что для тех, кто не знает, как сделать простое перенаправление, можно с осторожностью играть в безопасности, а не реализовывать простой, но важный шаг, чтобы он мог воспользоваться преимуществами продвинутого процесса. контроль.
Alix Axel 5.06.2013 17:24:12
Но браузеры, которые уважают заголовок, покинут страницу и закроют соединение, пока ваш скрипт еще выполняется. Это абсолютно плохо. PHP продолжит работу со сценарием в течение некоторого времени (вот почему ваш код выполняется), но может случайно прервать его в середине выполнения, оставив вещи испорченными. Вызов ignore_user_abort () предотвратит это, но, честно говоря, это того не стоит. Просто продолжайте писать что-то на HTML (хотя, вероятно, бесполезно), но не делайте вещи, которые пишут на диск или базу данных после заголовка ('Location:'); Запишите на диск перед перенаправлением, если это возможно. [Также: URL должен быть абсолютным.]
FrancescoMM 21.03.2017 17:45:53
Есть ли способ перенаправить, прежде чем браузер обнаружит протокол HTTP? причина, по которой мне нужно перенаправить, заключается в том, что я не могу получить достаточно сертификатов SSL для всех моих доменов. Я бы использовал .htaccessдля перенаправления, но мне нужно каким-то образом передать какой домен перенаправлен в окончательный домен?
oldboy 7.08.2019 00:53:02

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

16
20.04.2009 14:14:41
Есть ли способ перенаправить, прежде чем браузер обнаружит протокол HTTP? причина, по которой мне нужно перенаправить, заключается в том, что я не могу получить достаточно сертификатов SSL для всех моих доменов. Я бы использовал .htaccessдля перенаправления, но мне нужно каким-то образом передать какой домен перенаправлен в окончательный домен?
oldboy 7.08.2019 00:53:07
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

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

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

109
28.04.2009 03:14:38
И не забывайте буферизацию вывода, иначе вы получите «Заголовки уже отправлены».
Kuroki Kaze 20.04.2009 14:36:52
... и не забудьте распечатать somthign вроде «вы будете перенаправлены на $ nepage через $ n секунд, нажмите здесь ссылку $, если перенаправление не произойдет». Некоторые более широкие и некоторые настройки браузера могут потерпеть неудачу при перенаправлении.
Strae 20.04.2009 15:49:05
@DaNieL: этот тип перенаправления не займет «$ n секунд». Это произойдет мгновенно, если это вообще произойдет, и любой соответствующий браузер должен справиться с этим. Я думаю, что вы думаете о перенаправлениях "meta refresh", которые люди используют, когда они не знают ничего лучше.
rmeador 20.04.2009 16:03:31
@rmeador ... Для старых и специализированных браузеров. Сначала вы должны сделать свой заголовок Location, если в случае неудачи есть мета-перенаправление с «вы будете перенаправлены на страницу через x секунд» со ссылкой в ​​случае сбоя мета-перенаправления. Это правильный и безотказный способ сделать перенаправление.
Andrew Moore 20.04.2009 20:48:10
Эндрю: как HTTP-браузер может не уважать?
vartec 21.04.2009 07:56:48

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

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/");
1674
13.08.2018 12:34:24
Некоторые проблемы с этим ответом: 303 может не быть «правильным» кодом состояния. 301 может быть желательным для Google, например. Во-вторых, header('Location: '.$newURL);должно быть до того, как какой-либо HTML (или текст) будет передан в браузер, иначе он не будет работать правильно.
Chuck Le Butt 27.05.2011 12:30:48
К сожалению, ежедневная история WTF является обычной. Во всяком случае, проблема заключается не в пропавшей матрице, а в плохом дизайне. Насильственное прекращение процесса неправильно в 99,9% случаев. Распространенное, более чистое решение (не мое любимое в любом случае) состоит в том, чтобы вызвать исключение RedirectionException и поймать его в точке входа приложения. После этого у вас могут быть все ваши звонки "после *" (журналы / закрытие соединений / что
robertodecurnex 17.07.2014 04:09:37
http-equiv="Location"Не поддерживается всеми браузерами. Вы должны использовать refreshвместо этого! <meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002 23.09.2014 08:06:59
Никогда не выпускайте 301, если вы не имеете это в виду . 301 означает постоянный, а постоянный означает постоянный , то есть он будет кэшироваться пользовательскими агентами, что означает долгие, наполненные кофеином ночи, уставившись на журналы приложений, гадающие, не сходите ли вы с ума, потому что вы клянетесь, что какая-то страница должна была быть вызвана или обновлена, и вы клянетесь Богу, это работает на вашей машине, но не на клиенте. Если вам абсолютно необходимо вызвать 301, установите максимальный возраст элемента управления кэшированием для ресурса. У вас нет бесконечной мудрости, и вы не должны вести себя так, как вы.
madumlao 12.12.2014 09:47:06
Но есть ли причина использовать die вместо выхода? выход кажется чище и уместнее.
ars265 9.03.2015 18:21:24

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

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

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

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

6
20.04.2009 14:23:17
but you need to do it before you've sent any other output to the browser. Потрясающие!! Я искал минуты, почему я продолжал получать заголовки уже отправленной ошибки. +1 !!
josh 18.01.2014 08:39:54
В более общем смысле, вы имеете / полностью останавливаете свой скрипт /. die()это только один из способов сделать это.
MauganRa 13.11.2016 15:29:55

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

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

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

55
20.04.2009 14:33:34
Как насчет того, чтобы дать какой-то вывод пользователю перед тем, как убить скрипт? Вы знаете, люди любят знать, что происходит в ...
Strae 20.04.2009 15:50:34
вы предполагаете, что скрипт не имеет ничего общего, кроме перенаправления. Что может быть совсем не так.
vartec 20.04.2009 17:11:03
@DaNieL: измени его, чтобы умереть («Хватит игнорировать мои заголовки!»)
nickf 21.04.2009 00:56:03
Мне понравилось то простое объяснение, которое die();вы дали - если вы этого не сделаете, пользователь может на мгновение увидеть всю страницу, если вы ее используете; пользователь будет перенаправлен, и никакой временный сбой контента не покажет + 1
TheBlackBenzKid 2.06.2015 05:46:01
После отправки заголовка может возникнуть полезная активность, активность, которая ничего не отправляет в браузер, но регистрирует активность или завершает запись транзакций. По этой причине необходимость в die / exit зависит от сценария.
DanAllen 16.11.2017 01:03:00

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

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

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

7
20.04.2009 20:25:12

Я уже ответил на этот вопрос, но я сделаю это снова, поскольку тем временем я узнал, что есть особые случаи, если вы работаете в 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)
13
18.02.2019 07:05:58

Многие из этих ответов верны, но они предполагают, что у вас есть абсолютный 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
19
15.01.2014 04:21:54

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

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

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

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

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

102
23.05.2017 11:47:36
Простой и точный ответ! Отлично подходит для простого перенаправления страниц!
Stathis Andronikos 19.05.2016 11:04:24
И таким образом вы не столкнетесь с общей Cannot modify header information - headers already sent byошибкой.
Kai Noack 28.08.2016 18:33:00
@hmd, что если javascript отключен?
Istiaque Ahmed 9.09.2017 21:20:06
@IstiaqueAhmed javascript почти всегда включен в наши дни, но если он отключен, вы можете использовать буфер PHP. Этот ТАК вопрос отвечает на это. Если вы используете PHP Buffering, то вам не нужен этот метод, я думаю.
Hammad Khan 10.09.2017 17:55:41
Ложь, вы можете (и должны) делать это в PHP даже без буферизации: на правильно спроектированной странице вся соответствующая обработка PHP должна выполняться до того, как пользователю отправляется любой HTML-контент. Таким образом, PHP перенаправления будут работать нормально.
MestreLion 4.08.2018 08:45:42

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

header("Location: /index.php");
exit(0);   
16
16.01.2020 05:48:37

Вы можете использовать некоторые методы 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");

7
18.02.2019 07:08:35
Javascript работает на клиенте, который может или не может быть то, что вы ищете.
chharvey 7.08.2015 19:35:24

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

<?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
13.03.2020 19:12:59

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

<?php
    session_start();

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

    // Page goes here
?>

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

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

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

24
19.02.2019 22:40:54

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

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

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

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

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

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

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

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

6
18.02.2019 08:50:11
exit () должен использоваться сразу после заголовка ()
EKanadily 17.02.2017 07:05:25
@docesam .. согласовано .. exit () должен быть вызван сразу после вызова header (). Однако я чувствую, что если после этого оператора header () больше нет вывода в браузер, exit () может и не понадобиться - только мое мнение
Bhaskar Pramanik 20.02.2017 04:23:22
да, но вы должны объяснить это, потому что кто-то может скопировать вашу строку кода в свой сценарий, и это может привести к тому, что вы долго будете кружить вокруг себя, выясняя, что пошло не так.
EKanadily 21.02.2017 02:47:36
@BhaskarPramanik представьте, что вам нужно быстро запереть дверь, но затем вы должны снова потянуть / толкнуть / разбить ее, чтобы убедиться, что она уже заперта или нет ..
aswzen 22.03.2018 03:40:43

Лучший способ перенаправить с помощью 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).

5
18.02.2019 08:51:00
Уже есть ответ с 1085, который содержит информацию, которую вы предоставляете, а также многое другое.
Patrick Hund 9.04.2017 09:00:24

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
?>
90
18.02.2019 12:08:56
Работай как шарм. Я использую <? Php echo "<script> location.href = ' google.fr /' ; </script >"; ?> Чтобы проверить это, и он сделал то, что я хотел
DoctorDroid Haiti 27.03.2019 15:38:45

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

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

<?php
    header("location:./"); // Redirect to index file
    header("location:index.php"); // Redirect to index file
    header("location:example.php");
?>
4
18.02.2019 12:17:50

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

<?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.
?>
8
18.02.2019 08:58:32

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

Redirect 301 / http://new-site.com/
1
13.10.2017 10:56:05

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

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

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

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

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

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

7
18.02.2019 09:02:02

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

  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>";
        }
    ?>
3
18.02.2019 09:04:51
Что это? Пожалуйста, не используйте ссылки на ваш собственный сайт. И во втором примере используется перенаправление JavaScript, а не header()функция PHP .
Scriptman 18.01.2018 09:51:41

Есть несколько способов сделать это, но если вы предпочитаете 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
18.02.2019 09:09:51

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

<?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();
?>
9
18.02.2019 12:15:46
Почему (ближе к концу второго абзаца)? Вы имеете в виду &paraвместо этого (так что все читается mypage.php?param1=val1&param2=val2))? (HTML - объект пункт ) является «¶» - возможно , какая - то внешняя программа сделала преобразование?).
Peter Mortensen 18.02.2019 09:25:56

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>";
   ?>
3
18.02.2019 09:31:38

Попробуй это

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
0
9.01.2020 13:21:27

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

<?php

header("Refresh: 5;url=índex.php");
2
13.01.2020 05:21:08

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

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

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

// A.php

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

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

}


// B.php
<p> I am Page B</p>

0
15.03.2020 07:52:05