【问题标题】:How do I make a redirect in PHP?如何在 PHP 中进行重定向?
【发布时间】:2022-01-04 00:34:17
【问题描述】:

是否可以通过使用 PHP 将用户重定向到不同的页面?

假设用户转到www.example.com/page.php,我想将他们重定向到www.example.com/index.php,如果不使用元刷新,我该怎么做?可能吗?

这甚至可以保护我的页面免受未经授权的用户访问。

【问题讨论】:

  • 您可以在 PHP 中更新标头:header
  • @Sam:就像侧节点一样,不要通过重定向实现任何类型的protection from unauthorized users;这不是应该做的事情;)
  • @Strae 用 redirect 保护页面有什么问题?那么最好的方法是什么?
  • @PravindaAmarathunga redirect 是元素之一,但不是唯一的元素。只需确保未授权用户根本不会输出受保护的元素;浏览器的重定向可以在客户端禁用,例如:如果浏览器不进行重定向并且原始页面正常输出,用户会看到什么? CMS 通常做重定向不打印受保护的项目,用礼貌的信息代替正常的输出。
  • @PravindaAmarathunga 检查 markus 回答中的链接:thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

标签: php redirect http-status-code-301 http-redirect


【解决方案1】:

现有答案的摘要加上我自己的两分钱:

1. 基本答案

您可以使用 header() 函数发送新的 HTTP 标头,但这必须在任何 HTML 或文本之前发送到浏览器(例如,在 <!DOCTYPE ...> 声明之前)。

header('Location: '.$newURL);

2.重要细节

死()或者出口()

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

为什么要使用die()exit()The Daily WTF

绝对或相对 URL

自 2014 年 6 月起,可以使用绝对和相对 URL。请参阅 RFC 7231,它取代了旧的 RFC 2616,其中只允许使用绝对 URL。

状态码

PHP 的“Location”-header 仍然使用HTTP 302-redirect 代码,这是一个“临时”重定向,可能不是您应该使用的。您应该考虑 301(永久重定向)或 303(其他)。

注意:W3C mentions 303 标头与“许多 HTTP/1.1 之前的用户代理不兼容。当前使用的浏览器都是 HTTP/1.1 用户代理。对于许多其他用户代理(如蜘蛛和机器人)而言,情况并非如此。

3.文档

HTTP 标头和 PHP 中的 header() 函数

4.备选方案

您可以使用 http_redirect($url); 的替代方法,它需要安装 PECL package pecl

5.辅助功能

此函数不包含 303 状态代码:

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

    exit();
}

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

这更灵活:

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

6.解决方法

如前所述,header() 重定向仅在写出任何内容之前起作用。如果 invoked inmidst HTML 输出,它们通常会失败。那么你可能会使用 HTML 标头解决方法(不是很专业!),例如:

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

或者甚至是 JavaScript 重定向。

window.location.replace("https://example.com/");

【讨论】:

  • 这个答案的一些问题:303 可能不是“正确”的状态代码。例如,Google 可能需要 301。其次,header('Location: '.$newURL); 必须在任何 HTML(或文本)传递给浏览器之前,否则将无法正常工作。
  • 可悲的是,每日 WTF 故事很常见。不管怎样,导致问题的不是芯片缺失,而是糟糕的设计。在 99.9% 的情况下,暴力关闭进程是错误的。一个常见的、更简洁的解决方案(无论如何不是我最喜欢的)是抛出一个 RedirectionException 并在你的应用程序入口点捕获它。之后,您可以进行所有“* 之后”调用(日志/关闭连接/任何情况)
  • 并非所有浏览器都支持 http-equiv="Location"。您应该改用refresh&lt;meta http-equiv="refresh" content="0;url=http://example.com/"&gt;
  • 绝不发出 301 除非你意思是. 301表示永久,永久的意思永恒的,这意味着它将被用户代理缓存,这意味着漫长的、充满咖啡因的夜晚盯着应用程序日志,想知道你是否会发疯,因为你发誓某些页面应该被调用或更新,你向上帝发誓它在你的机器上工作但是不是客户的。如果您绝对必须调用 301,请在资源上放置一个缓存控制 max-age。你没有无限的智慧,你不应该像你那样行事。
  • 但是有理由使用 die over exit 吗? exit 似乎更干净,更合适。
【解决方案2】:

使用header() function发送HTTP Location header

header('Location: '.$newURL);

与某些人的想法相反,die() 与重定向无关。用它只要如果你想重定向反而的正常执行。

文件例子.php:

<?php
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt', 'a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "
");
    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 执行。

【讨论】:

  • die() 或 exit() 适用于不遵守“位置:...”标头的客户
  • @clawr:不,exit() 是为了防止页面显示剩余内容(想想受限制的页面)。 vartec 是对的,它与 HTTP Location 标头无关你不需要exit。我选择将其包含在我的答案中,因为对于不知道如何做的人简单的重定向,一个人还不如安全行事,而不是不实施一个简单但关键的步骤,这样他就能够利用先进的过程控制。
  • 但是尊重标头的浏览器将在您的脚本仍在执行时离开页面并关闭连接。这太糟糕了。 PHP 将继续执行脚本一段时间(这就是您的代码执行的原因),但可能会在执行过程中随机中止它,从而导致内容损坏。调用 ignore_user_abort() 可以防止这种情况发生,但我真的不值得这样做。继续你的 HTML 写东西(虽然可能没用)但是不要在 header('Location:') 之后写在磁盘或数据库上的东西;如果可能,在重定向之前写入磁盘。 [另外:url 应该是绝对的。]
  • 有什么方法可以在浏览器检测到 HTTP 协议之前重定向?我需要重定向的原因是因为我无法为我的所有域获得足够的 SSL 证书。我会使用.htaccess 进行重定向,但我需要一种方法来以某种方式传递重定向到最终域的域?
【解决方案3】:
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

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

不要忘记die() / exit()

【讨论】:

  • 并且不要忘记输出缓冲,否则您将以“标题已发送”告终。
  • ... 并且不要忘记打印出诸如“您将在 $n 秒内被重定向到 $nepage,如果重定向没有发生,请单击此处的 $link”之类的东西。某些浏览器和某些浏览器的设置可能会导致重定向失败。
  • @DaNieL:这种类型的重定向不会花费“$n 秒”。如果它真的发生了,那将是即时的,任何符合标准的浏览器都应该处理它。我认为您正在考虑人们在不知道更好时使用的“元刷新”重定向。
  • @rmeador ...适用于旧版浏览器和专业浏览器。你应该首先做你的 Location 标题,如果失败有一个元重定向,“你将在 x 秒内被重定向到页面”和一个链接,以防元重定向失败。这是进行重定向的正确且安全的方法。
  • 安德鲁:HTTP 浏览器怎么能不尊重位置:?
【解决方案4】:

使用 echo 从 PHP 输出 JavaScript,这将完成这项工作。

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

除非您缓冲页面输出然后检查重定向条件,否则您不能真正在 PHP 中执行此操作。那可能太麻烦了。请记住,标题是从页面发送的第一件事。大多数重定向通常在页面后面需要。为此,您必须缓冲页面的所有输出并稍后检查重定向条件。此时,您可以重定向页面用户 header() 或简单地回显缓冲输出。

有关缓冲的更多信息(优点)

What is output buffering?

【讨论】:

  • 简单而中肯的答案!非常适合简单的页面重定向!
  • @hmd,如果 javascript 被禁用怎么办?
  • 错误,即使没有缓冲,您也可以(并且应该)在 PHP 中执行此操作:在一个设计良好的页面中,所有相关的 PHP 处理都应该在任何 HTML 内容发送给用户之前进行。这样 PHP 重定向就可以正常工作。
  • javascript 不会自动激活,事实上这只适用于现代浏览器。另外,问题是关于 php,而不是 JS
  • 是的,这是对一个完全不同的问题的回答。您无法控制客户端,假设您可以控制是很危险的。
【解决方案5】:

1.无表头

在这里你不会遇到任何问题

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

2. 使用标头函数exit()

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

但是如果你使用头函数那么有时你会得到“警告 像标题已经发送”要解决在发送标头之前不回显或打印的问题,或者您可以在标头功能之后简单地使用die()exit()

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>"; ?> 测试它,它做了我想要的
【解决方案6】:

大多数这些答案都忘记了非常重要的一步!

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

留下重要的第二行可能会让你最终看到The Daily WTF。问题是浏览器不为了尊重您的页面返回的标头,因此在忽略标头的情况下,页面的其余部分将在没有重定向的情况下执行。

【讨论】:

  • 在终止脚本之前向用户提供一些输出怎么样?你知道,人们喜欢知道发生了什么……
  • 你假设脚本除了重定向之外没有任何关系。这可能根本不是真的。
  • @DaNieL:将其更改为死(“停止忽略我的标题!”)
  • 我喜欢你给出的 die(); 的简单解释——如果你不这样做,如果你使用它,用户可能会暂时看到完整的页面;用户将被重定向并且不会显示临时内容故障 + 1
  • 发送标头后可能会发生有用的活动,活动不会向浏览器发送任何内容,但会记录活动或完成记录事务。因此,死/退出的需要取决于脚本。
【解决方案7】:

利用:

<?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()

【讨论】:

  • 它仅作为代码中的第一条语句起作用。如果您有逻辑,重定向就是基于此。使用 meta http-equiv refresh 或 window.open javascript 比。 (复制)
  • 它不必是代码中的第一条语句。它只需要在任何输出之前。在开始打印输出之前组织您的代码以执行所有逻辑 - 然后它可能应该一次性打印准备好的输出。
【解决方案8】:

您可以使用会话变量来控制对页面的访问并授权有效用户:

<?php
    session_start();

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

    // Page goes here
?>

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

最近,我受到网络攻击并决定,我需要知道试图访问管理面板或 Web 应用程序的保留部分的用户。

因此,我在文本文件中添加了对 IP 地址和用户会话的日志访问,因为我不想打扰我的数据库。

【讨论】:

    【解决方案9】:

    其中许多答案都是正确的,但它们假设您有一个绝对 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
    

    【讨论】:

      【解决方案10】:

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

      【讨论】:

      • 有什么方法可以在浏览器检测到 HTTP 协议之前重定向?我需要重定向的原因是因为我无法为我的所有域获得足够的 SSL 证书。我会使用.htaccess 进行重定向,但我需要一种方法来以某种方式传递重定向到最终域的域?
      【解决方案11】:

      使用以下代码:

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

      【讨论】:

        【解决方案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 重定向代码(301302303307)的问题,因为它已在我之前回答的 cmet 中解决。以下是描述:

        • 301- 永久移动
        • 302- 成立
        • 303- 查看其他
        • 307- 临时重定向 (HTTP/1.1)

        【讨论】:

          【解决方案13】:

          要将访问者重定向到另一个页面(在条件循环中特别有用),只需使用以下代码:

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

          在这种情况下,mypage.php 是您希望将访问者重定向到的页面地址。该地址可以是绝对地址,也可以包含以下格式的参数:mypage.php?param1=val1&amp;m2=val2)

          相对/绝对路径

          在处理相对或绝对路径时,最好选择从服务器根目录 (DOCUMENT_ROOT) 开始的绝对路径。使用以下格式:

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

          如果目标页面在另一台服务器上,则包括完整的 URL:

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

          HTTP 标头

          根据 HTTP 协议,HTTP 标头必须发送 before 任何类型的内容。这意味着在标头之前不应发送任何字符——即使是空格也不行!

          临时/永久重定向

          默认情况下,上面显示的重定向类型是临时的。这意味着搜索引擎(例如 Google 搜索)在编制索引时不会考虑重定向。

          如果您想通知搜索引擎某个页面已永久移动到另一个位置,请使用以下代码:

          <?
              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 永久移动)。因此,如果您在 Google 中输入第一个 URL,您将自动重定向到第二个重定向链接。

          PHP代码解读

          位于 header() 之后的 PHP 代码将被服务器解释,即使访问者移动到重定向中指定的地址。在大多数情况下,这意味着您需要一个方法来遵循 exit() 函数的 header() 函数,以减少服务器的负载:

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

          【讨论】:

          • 为什么是(接近第二段结尾)?您是指 &amp;para 而不是(所以整个读为 mypage.php?param1=val1&amp;param2=val2))? (HTML 实体para)是“¶”——也许是某个外部程序进行了转换?)。
          【解决方案14】:

          利用:

          <?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.
          ?>
          

          【讨论】:

            【解决方案15】:

            是的,可以使用 PHP。我们将重定向到另一个页面。

            试试下面的代码:

            <?php
                header("Location:./"); // Redirect to index file
                header("Location:index.php"); // Redirect to index file
                header("Location:example.php");
            ?>
            

            【讨论】:

              【解决方案16】:

              在语义网的前夕,正确性是需要考虑的问题。不幸的是,PHP 的“Location”-header 仍然使用HTTP 302-redirect 代码,严格来说,这不是重定向的最佳代码。它应该使用的是303

              W3C 对mention 表示 303 标头与“许多 HTTP/1.1 之前的用户代理”不兼容,这相当于当前没有浏览器在使用。所以,302是一个遗物,它不应该使用。

              ......或者你可以像其他人一样忽略它......

              【讨论】:

                【解决方案17】:
                header("Location: https://www.example.com/redirect.php");
                

                直接重定向到此链接https://www.example.com/redirect.php

                $redirect = "https://www.example.com/redirect.php";
                header("Location: $redirect");
                

                首先得到$重定向value 而不是重定向到 [value],例如:https://www.example.com/redirect.php

                【讨论】:

                  【解决方案18】:

                  您可以使用一些 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 在客户端上运行,这可能是您正在寻找的,也可能不是。
                  【解决方案19】:

                  是的,你可以使用header()函数,

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

                  最好的做法是在 header() 函数之后立即调用 exit() 函数以避免下面的代码执行。

                  根据文档,必须在发送任何实际输出之前调用header()

                  【讨论】:

                    【解决方案20】:

                    要在 php 中重定向,请使用:

                    &lt;?php header('Location: URL'); exit; ?&gt;

                    【讨论】:

                      【解决方案21】:

                      就像这里的其他人说的那样,发送位置标头:

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

                      但是您需要在将任何其他输出发送到浏览器之前执行此操作。

                      此外,如果您打算使用它来阻止未经身份验证的用户进入某些页面,就像您提到的那样,请记住某些用户代理 will ignore this 并继续在当前页面上,所以您需要死( ) 发送后。

                      【讨论】:

                      • but you need to do it before you've sent any other output to the browser.太棒了!!一直在寻找关于为什么我一直收到已发送的标头错误的几分钟。 +1!!
                      • 更一般地说,你有/完全停止你的脚本/。 die() 只是一种方法。
                      【解决方案22】:

                      这是我的想法:

                      恕我直言,重定向传入请求的最佳方法是使用位置标头,这

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

                      一旦执行此语句并发送输出,浏览器将开始重定向用户。但是,请确保在发送标头之前没有任何输出(任何 echo / var_dump),否则会导致错误。

                      虽然这是实现最初要求的一种快速而肮脏的方法,但它最终会变成 SEO 灾难,因为这种重定向总是被解释为 301 / 302 重定向,因此搜索引擎总是会看到你的索引页面作为重定向页面,而不是登陆页面/主页。

                      因此,它将影响网站的 SEO 设置。

                      【讨论】:

                      • exit() 应该在 header() 之后立即使用
                      • @docesam .. 同意 .. exit() 应该在 header() 调用之后立即调用。但是我觉得,如果在这个 header() 语句之后没有更多的输出到浏览器,则可能不需要 exit() - 只是我的意见
                      • 是的,但你必须解释一下,因为有人可以将你的代码行复制到他的脚本中,这可能会导致长时间绕着他自己转,找出问题所在。
                      • @BhaskarPramanik 想象你必须快速锁上一扇门,但随后你必须再次拉/推/砸门以确保它是否已经锁上。
                      【解决方案23】:

                      使用 PHP 重定向的最佳方法是以下代码...

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

                      确保之后没有代码可以工作

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

                      所有代码都必须在上述行之前执行。

                      认为,

                      情况1:

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

                      它将正确重定向到该位置 (index.php)。

                      案例二:

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

                      上面的代码不会重定向到该位置(index.php)。

                      【讨论】:

                      • 已经有一个 1085 的答案,其中包含您提供的信息以及更多信息。
                      【解决方案24】:

                      您可以尝试使用

                      header('Location:'.$your_url)
                      

                      更多信息可以参考php official documentation

                      【讨论】:

                        【解决方案25】:

                        1. 使用header,内置PHP函数

                        a) 没有参数的简单重定向

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

                        b) 使用 GET 参数重定向

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

                        2. 在 PHP 中使用 JavaScript 重定向

                        a) 没有参数的简单重定向

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

                        b) 使用 GET 参数重定向

                        <?php
                             $id = 2;
                             echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
                           ?>
                        

                        【讨论】:

                        • 不知何故,javascript 位是唯一在网站最终托管中起作用的东西;我相信这是缓存的问题,但我马上就解决了。
                        【解决方案26】:

                        使用 header 函数进行路由

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

                        假设我们想从一个.php归档到B.php比我们必须寻求&lt;button&gt;&lt;a&gt;的帮助。让我们看一个例子

                        <?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>
                        

                        【讨论】:

                        • 已经有很多解决方案。您的解决方案混合了没有 PHP 标记的 HTML 和 PHP。其次,你在打印 html 代码后发送标题,所以它不起作用。并且示例文件的名称是错误的。您不应该将它们命名为 A.php 和 B.php。我知道这只是示例,但您仍然应该关心命名约定。
                        【解决方案27】:

                        我们可以通过两种方式做到这一点:

                        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 重定向,而不是 PHP header() 函数。
                        【解决方案28】:

                        利用:

                        <?php
                            $url = "targetpage"
                            function redirect$url(){
                                if (headers_sent()) == false{
                                    echo '<script>window.location.href="' . $url . '";</script>';
                                }
                            }
                        ?>
                        

                        【讨论】:

                        • 你能解释一下你的代码的功能吗?您的回答因其长度和内容而被标记。
                        【解决方案29】:

                        有多种方法可以做到这一点,但如果您更喜欢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”);
                        
                            . . .
                        

                        参考;

                        【讨论】:

                          【解决方案30】:

                          我喜欢那种数秒后的重定向

                          <?php
                          
                          header("Refresh: 3;url=https://theweek.com.br/índex.php");
                          

                          【讨论】:

                            猜你喜欢
                            • 2015-12-04
                            • 2014-05-27
                            • 2016-09-22
                            • 2011-01-26
                            • 2019-06-09
                            • 1970-01-01
                            • 2010-12-21
                            • 2014-05-08
                            • 2012-01-08
                            相关资源
                            最近更新 更多