如何在 PHP 中进行重定向?

How do I make a redirect in PHP?

提问人:Sam 提问时间:4/20/2009 最后编辑:Paulo BoaventuraSam 更新时间:9/7/2023 访问量:3753908

问:

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

假设用户转到并且我想将他们重定向到,如果不使用元刷新,我将如何做到这一点?可能吗?www.example.com/page.phpwww.example.com/index.php

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

php 重定向 http-status-code-301 http-redirect

评论

17赞 Strae 5/27/2011
@Sam:就像 side 节点一样,不要实现任何形式的 via 重定向;这不是应该做的事情;)protection from unauthorized users
10赞 8/16/2013
@Strae 使用重定向保护页面有什么问题?那么最好的方法是什么呢?
9赞 Strae 8/17/2013
@PravindaAmarathunga重定向是元素之一,但不是唯一的元素。只要确保受保护的元素根本不会输出给未经授权的用户;浏览器的重定向可以在客户端禁用,例如:如果浏览器不执行重定向,并且原始页面正常输出,用户将看到什么?CMS 通常会执行重定向,并且不会打印出受保护的项目而是将正常输出替换为礼貌消息。
2赞 Strae 8/17/2013
@PravindaAmarathunga查看 Markus 回答中的链接: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
0赞 Zack Marrapese 4/20/2009
您可以在 PHP 中更新标头:header

答:

154赞 vartec 4/20/2009 #1

使用 header() 函数发送 HTTP Location 标头

header('Location: '.$newURL);

与某些人的想法相反,与重定向无关。当您想要重定向而不是正常执行时才使用它。die()

文件示例.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

恢复 — 强制性 / 是一些都市传说,与实际的 PHP 无关。它与客户端“尊重”标头无关。无论使用何种客户端,发送标头都不会停止 PHP 执行。die()exit()Location:

评论

8赞 clawr 4/21/2009
die() 或 exit() 适用于不遵守 “Location: ...”页眉
18赞 Alix Axel 6/6/2013
@clawr:不,是为了防止页面显示剩余内容(想想受限制的页面)。vartec是对的,它与HTTP Location标头无关,您不需要.我选择将它包含在我的答案中,因为对于不知道如何进行简单重定向的人来说,最好谨慎行事,而不是不实施简单但关键的步骤,以便他能够利用先进的流程控制。exit()exit
2赞 FrancescoMM 3/22/2017
但是,尊重标头的浏览器将离开页面并关闭连接,而您的脚本仍在执行。这完全是坏事。PHP 会继续执行脚本一段时间(这就是你的代码执行的原因),但可能会在执行过程中随机中止它,留下东西损坏。调用 ignore_user_abort() 可以防止这种情况,但真诚地,我不值得。继续你的HTML写作(虽然可能没用),但不要做在header('Location:')之后写在磁盘或数据库上的东西;如果可能,请在重定向之前写入磁盘。[另外:url 应该是绝对的。
0赞 oldboy 8/7/2019
在浏览器检测到HTTP协议之前,有没有办法重定向?我需要重定向的原因是因为我无法获得所有域的足够SSL证书。我会用来重定向,但我需要一种方法以某种方式传递重定向到最终域的域?.htaccess
0赞 Your Common Sense 9/7/2023
这是那些只是为了炫耀而不是帮助人们而写的有害问题之一。虽然从技术上讲,所提供的示例是正确的,但它对普通观众来说弊大于利。
20赞 Daniel A. White 4/20/2009 #2

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

评论

0赞 oldboy 8/7/2019
在浏览器检测到HTTP协议之前,有没有办法重定向?我需要重定向的原因是因为我无法获得所有域的足够SSL证书。我会用来重定向,但我需要一种方法以某种方式传递重定向到最终域的域?.htaccess
124赞 Alix Axel 4/20/2009 #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()

评论

6赞 Kuroki Kaze 4/20/2009
不要忘记输出缓冲,否则您最终会得到“已发送的标头”。
8赞 Strae 4/20/2009
...别忘了打印出诸如“您将在 $n 秒内被重定向到 $nepage,如果重定向没有发生,请单击此处$link”某些浏览器和某些浏览器的设置可能会使重定向失败。
4赞 rmeador 4/21/2009
@DaNieL:这种类型的重定向不会花费“$n秒”。如果它发生,它将是即时的,任何符合要求的浏览器都应该处理它。我想你正在考虑人们在不知道更好的时候使用的“元刷新”重定向。
1赞 Andrew Moore 4/21/2009
@rmeador......适用于较旧的浏览器和专业浏览器。您应该首先做您的位置标题,如果失败,则有一个元重定向,其中包含“您将在 x 秒内被重定向到页面”和一个链接,以防元重定向失败。这是进行重定向的正确且故障安全的方法。
3赞 vartec 4/21/2009
Andrew:HTTP浏览器怎么能不尊重Location:?
2051赞 24 revs, 15 users 65%markus #4

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

1. 基本答案

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

header('Location: '.$newURL);

2. 重要细节

die()exit()

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

为什么你应该使用或 : The Daily WTFdie()exit()

绝对或相对 URL

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

状态代码

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

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

3. 文档

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

4. 替代方案

您可以使用需要安装 PECL 软件包 pecl 的替代方法。http_redirect($url);

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. 解决方法

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

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

甚至是 JavaScript 重定向。

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

评论

5赞 Chuck Le Butt 5/27/2011
这个答案存在一些问题:303 可能不是“正确”的状态代码。例如,Google 可能需要 301。其次,必须在任何 HTML(或文本)传递到浏览器之前,否则它将无法正常工作。header('Location: '.$newURL);
7赞 Roberto Decurnex 7/17/2014
可悲的是,WTF的日常故事很常见。无论如何,导致问题的不是缺失的模具,而是糟糕的设计。在99.9%的情况下,暴力关闭进程是错误的。一个常见的、更简洁的解决方案(无论如何都不是我最喜欢的)是抛出 RedirectionException 并在应用程序入口点捕获它。在那之后,您可以进行所有“after *”调用(日志/关闭连接/其他任何)
4赞 Timo002 9/23/2014
并非所有浏览器都支持 。你应该改用!http-equiv="Location"refresh<meta http-equiv="refresh" content="0;url=http://example.com/">
104赞 madumlao 12/12/2014
除非你是认真的,否则永远不要发出 301。301 意味着永久,永久意味着永久,这意味着它将被用户代理缓存,这意味着漫长的、充满咖啡因的夜晚盯着应用程序日志,想知道你是否发疯了,因为你发誓某个页面应该被调用或更新,你向上帝发誓它适用于你的机器,而不是客户端的。如果绝对必须调用 301,请在资源上放置缓存控制 max-age。你没有无限的智慧,你不应该像你那样行事。
3赞 ars265 3/10/2015
但是有理由使用骰子而不是退出吗?退出似乎更干净、更合适。
6赞 Brent 4/20/2009 #5

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

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

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

此外,如果您打算使用它来阻止未经身份验证的用户访问某些页面,就像您提到的,请记住,某些用户代理会忽略这一点并继续访问当前页面,因此您需要在发送后 die()。

评论

0赞 josh 1/18/2014
but you need to do it before you've sent any other output to the browser.棒!!几分钟来一直在寻找为什么我一直收到已发送的标头错误。+1!!
0赞 MauganRa 11/13/2016
更一般地说,你有 /stop 你的脚本完全/。 只是一种方法。die()
58赞 nickf 4/20/2009 #6

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

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

把那重要的第二行排除在外,可能会让你最终登上 The Daily WTF。问题在于浏览器不必尊重页面返回的标题,因此在标题被忽略的情况下,页面的其余部分将在没有重定向的情况下执行。

评论

1赞 Strae 4/20/2009
在终止脚本之前给用户一些输出是怎么回事?你知道,人们喜欢知道发生了什么......
3赞 vartec 4/21/2009
您假设脚本除了重定向之外没有任何关系。这可能根本不是真的。
15赞 nickf 4/21/2009
@DaNieL:把它改成死(“别再忽略我的标题了!
3赞 TheBlackBenzKid 6/2/2015
我喜欢你给出的简单解释 - 如果你不这样做,如果你使用它,用户可能会看到完整的页面一会儿;用户将被重定向,并且不会显示任何临时内容故障 + 1die();
0赞 DanAllen 11/16/2017
在发送标头后,可能会发生有用的活动,这些活动不向浏览器发送任何内容,但会记录活动或完成记录事务。因此,对死亡/退出的需求取决于脚本。
9赞 Henrik Paul 4/21/2009 #7

在语义网的前夕,正确性是需要考虑的事情。不幸的是,PHP 的 “Location” 标头仍然使用 HTTP 302 重定向代码,严格来说,这并不是重定向的最佳代码。它应该改用的是 303 那个。

W3C 善意地提到,303 标头与“许多 HTTP/1.1 之前的用户代理”不兼容,这相当于当前使用的浏览器。所以,302是遗物,不应该使用。

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

15赞 Alix Axel 4/29/2011 #8

我已经回答了这个问题,但我会再做一次,因为与此同时,我了解到,如果您在 CLI 中运行(重定向不会发生,因此不应该发生),或者如果您的 Web 服务器将 PHP 作为 (F)CGI 运行(它需要先前设置的标头才能正确重定向),则存在特殊情况。exit()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

  • 301 - 永久移动
  • 302 - 已找到
  • 303 - 查看其他
  • 307 - 临时重定向 (HTTP/1.1)
21赞 Luke 1/15/2014 #9

其中许多答案都是正确的,但它们假设您有一个绝对 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
113赞 TheTechGuy 6/27/2014 #10

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

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

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

有关缓冲(优点)的更多信息,请参阅什么是 PHP 中的输出缓冲?

评论

3赞 Stathis Andronikos 5/19/2016
简单而切中要害的答案!非常适合简单的页面重定向!
1赞 Istiaque Ahmed 9/10/2017
@hmd,如果 javascript 被禁用怎么办?
4赞 MestreLion 8/4/2018
错,即使没有缓冲,你也可以(并且应该)在 PHP 中做到这一点:在一个精心设计的页面中,所有相关的 PHP 处理都应该在将任何 HTML 内容发送给用户之前进行。这样 PHP 重定向就可以正常工作了。
3赞 clockw0rk 6/4/2020
JavaScript 不会自动激活,事实上,这只适用于现代浏览器。另外,问题是关于 php,而不是 JS
1赞 miken32 12/8/2020
是的,这是一个完全不同的问题的答案。你无法控制客户端,假设你这样做是危险的。
19赞 joan16v 1/12/2015 #11

使用以下代码:

header("Location: /index.php");
exit(0);   
7赞 Vikram Pote 3/12/2015 #12

您可以使用一些 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");

评论

1赞 chharvey 8/8/2015
Javascript 在客户端上运行,这可能是也可能不是您要查找的。
35赞 jake 5/16/2016 #13

用:

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

评论

0赞 MindRoasterMir 3/20/2021
它仅用作代码中的第一个语句。如果你有逻辑,重定向就是基于此。使用 meta http-equiv refresh 或 window.open javascript than。(已复制)
0赞 bdsl 5/30/2021
它不必是代码中的第一个语句。它只需要在任何输出之前。在开始打印输出之前,组织您的代码以完成所有逻辑 - 然后它可能应该一次性打印准备好的输出。
26赞 Asuquo12 9/9/2016 #14

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

<?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 地址和用户会话的日志访问权限,因为我不想打扰我的数据库。

0赞 Doruk Ayar 11/15/2016 #15

您可以尝试使用 PHP 函数进行重定向。您需要设置输出缓冲区,以便浏览器不会向屏幕抛出重定向警告。header

ob_start();
header("Location: " . $website);
ob_end_flush();

评论

1赞 EKanadily 2/17/2017
exit() 应该在 header() 之后立即使用。此外,默认情况下,out buffering 已经自动开启了一段时间。
6赞 Bhaskar Pramanik 1/28/2017 #16

以下是我的想法:

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

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

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

虽然这是一种快速而肮脏的方式来实现最初要求的目标,但它最终会变成一场 SEO 灾难,因为这种重定向总是被解释为 301 / 302 重定向,因此搜索引擎将始终将您的索引页面视为重定向页面,而不是登录页面/主页。

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

评论

1赞 EKanadily 2/17/2017
exit() 应该在 header() 之后立即使用
0赞 Bhaskar Pramanik 2/20/2017
@docesam ..同意。。exit() 应该在 header() 调用后立即调用。但是我觉得,如果在此 header() 语句之后浏览器没有更多输出,则 exit() 可能没有必要 - 只是我的意见
0赞 EKanadily 2/21/2017
是的,但你必须解释这一点,因为有人可能会将你的代码行复制到他的脚本中,这可能会导致长时间在自己周围盘旋,找出出了什么问题。
1赞 aswzen 3/22/2018
@BhaskarPramanik想象一下,你必须快速锁上一扇门,但随后你必须再次拉/推/砸它们,以确保它是否已经锁上了。
5赞 sabuz 4/9/2017 #17

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

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

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

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

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

假设

案例一:

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

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

案例二:

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

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

评论

0赞 Patrick Hund 4/9/2017
已经有一个答案,其中包含 1085 包含您提供的信息,以及更多内容。
113赞 Juned Ansari 4/13/2017 #18

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

评论

1赞 DoctorDroid Haiti 3/27/2019
像魅力一样工作。我使用 <?php echo “<script>location.href='google.fr/';</script>“; ?> 测试它,它做了我想要的
10赞 Bhargav Chudasama 6/8/2017 #19

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

请尝试以下代码:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>
10赞 Obaidul Haque 8/18/2017 #20

用:

<?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.
?>
0赞 michal.jakubeczy 10/13/2017 #21

如果您在 Apache 上运行,您还可以使用 .htaccess 进行重定向。

Redirect 301 / http://new-site.com/
2赞 Joshua Charles Pickwell 11/21/2017 #22

用:

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

评论

1赞 www139 11/21/2017
你能解释一下你的代码的功能吗?您的答案因其长度和内容而被标记。
7赞 Casper 11/28/2017 #23

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

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

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

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

4赞 Kavita Sharma 1/4/2018 #24

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

  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>";
        }
    ?>
    

评论

0赞 Scriptman 1/18/2018
这是怎麽?请不要使用指向您自己网站的链接。第二个示例使用 javascript 重定向,而不是 PHP 函数。header()
2赞 Pyr James 1/29/2018 #25

有多种方法可以做到这一点,但如果你愿意,我建议使用该函数。phpheader()

基本上

$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”);

    . . .

引用;

13赞 Star 2/13/2018 #26

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

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

在本例中,是要将访问者重定向到的页面的地址。此地址可以是绝对地址,也可以包含以下格式的参数:mypage.phpmypage.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 搜索)在编入索引时不会考虑重定向。

如果要通知搜索引擎页面已永久移动到其他位置,请使用以下代码:

<?
    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 代码将由服务器解释,即使访问者移动到重定向中指定的地址也是如此。在大多数情况下,这意味着您需要一种方法来遵循函数的功能,以减少服务器的负载:header()exit()

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

评论

0赞 Peter Mortensen 2/18/2019
为什么(在第二段末尾)?你的意思是相反(所以整个阅读)?(HTML 实体段落)是“¶”——也许是某个外部程序进行了转换?&paramypage.php?param1=val1&param2=val2)
4赞 Shaan Ansari 8/3/2018 #27

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

评论

0赞 cdsaenz 4/28/2020
不知何故,javascript 位是网站最终托管中唯一有效的东西;我相信这是一个缓存问题,但我立即解决了它。
1赞 Shareque 1/9/2020 #28

试试这个

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
2赞 Paulo Boaventura 1/13/2020 #29

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

<?php

header("Refresh: 3;url=https://theweek.com.br/índex.php");
4赞 Mehedi Abdullah 3/15/2020 #30

使用标头函数进行路由

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

评论

0赞 Jsowa 5/7/2020
已经有很多解决方案。您的解决方案混合了 HTML 和 PHP,没有 PHP 标记。其次,您在打印 html 代码后发送标头,因此它不起作用。示例文件的名称是错误的。你不应该将它们命名为 A.php 和 B.php。我知道这只是一个例子,但你仍然应该关心命名约定。
11赞 Ghost 1/8/2021 #31

要在 PHP 中使用重定向:

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

5赞 Nimal V 6/14/2021 #32

您可以尝试使用

header('Location:'.$your_url)

更多信息可以参考 PHP 官方文档

11赞 CodAIK 1/4/2022 #33
header("Location: https://www.example.com/redirect.php");

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

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

首先获取$redirect值,然后重定向到 [value],例如:https://www.example.com/redirect.php

3赞 shankar kanase 4/25/2023 #34

您可以使用 PHP 中的 header() 函数执行重定向到另一个页面。header() 函数向浏览器发送原始 HTTP 标头,该标头可用于将用户重定向到新页面。下面是一个示例:

<?php
// Redirect to a new page
header("Location: https://www.example.com/newpage.php");
exit;
?>

在此示例中,header() 函数发送一个“Location”标头,其中包含用户将被重定向到的新页面的 URL。exit 语句用于立即结束当前脚本执行并防止任何进一步的输出。