PHP Header Redirect 问题(不,不是那个常见的问题)

Posted

技术标签:

【中文标题】PHP Header Redirect 问题(不,不是那个常见的问题)【英文标题】:PHP Header Redirect problem (no, not that common problem) 【发布时间】:2010-12-06 21:17:00 【问题描述】:

首先,这不是标头已发送的问题。

我有一个包含文件,用于重定向。这适用于我尝试过的每台服务器,除了运行 Windows 的生产服务器。

当我在生产服务器上运行它时,它只重定向包含文件,而不是整个页面。

我有主文件,index.php

<?php include('red.php'); ?>
<html ....
>

然后我重定向到 red.php 中的另一个页面。然后重定向的页面将显示在 index.php 页面的顶部,该页面之后的 index.php html 文件的其余部分。

php.ini 中的一些设置搞砸了吗?

经过进一步调查,问题在于我使用完整 URL 而不是相对 URL。第一个只会重定向包含的文件。 (我在上面发现的问题)

而第二个工作正常

red2.php:

header("位置:http://example.com/newfile.php"); header("位置:newfile.php");'

【问题讨论】:

能不能按顺序走一遍流程。请告诉我们您是如何设置每个文件的,它们在做什么(包括代码),您为什么这样做,以及当您尝试这些操作时,您的生产服务器和开发服务器上会发生什么。 【参考方案1】:

当我在生产服务器上运行它时,它只重定向包含文件,而不是整个页面。

说起来很有趣,因为这不太可能。只有一个数据块呈现给浏览器,您不能“重定向”其中的一部分,但您可以从多个文件中包含以生成复合块。

也许,这就是你正在做的。也许您正在执行包含而不是重定向。记住重定向是这样完成的:

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

建议在最后退出,以免不必要地继续执行。

【讨论】:

相关阅读:thephpcode.blogspot.com/2009/01/… 当我使用完整的url 'header("Location: example.com/newfile.php");'时出现问题【参考方案2】:

约翰,

我认为您对客户端上发生的事情与服务器上发生的事情感到困惑。

当您调用include() 时,服务器将在其本地文件系统中搜索您要包含的文件,并简单地运行并逐行执行。

现在,当您在 php 中调用 Header() 函数时,这会更改浏览器将接收的标头数据。因此,重定向将在浏览器级别而不是服务器级别完成。

这意味着拥有以下代码并没有真正意义:

<?php
# Doesn't matter if you call it through include() or directly
Header("Location: http://example.com/newfile.php");
?>
<html><p>Hello world</p></html>

这就像你在告诉浏览器:你需要重定向到 newfile.php,但无论如何这里有一些 HTML 内容供你显示。

如果您想在服务器端包含 newfile.php,您需要使用服务器端包含、CURL 或仅包含(“remote_file”); (如果 remote_file 位于另一台服务器上,即 allow_url_fopen,您需要更改 php.ini 中的安全设置,以便后者工作)

希望对你有帮助

【讨论】:

不,我没有感到困惑。我想我没有很好地解释它。我正在尝试包含一个文件,该文件有时具有 html,有时它会重定向。问题是,当我使用完整 URL 包含文件时,而不仅仅是文件名,当它重定向时它不会重定向整个页面,它只会重定向该包含。因此,它不是在页面上显示完全不同的内容,而是在页面顶部显示完全不同的内容,在底部显示原始文件的其余部分。 “仅重定向包含”绝对没有意义。除非您的页面是使用框架或 iframe 设置的,否则如果您正确设置 Header() 重定向并在调用后立即退出,则无论您使用相对路径还是绝对路径,都会显示新页面。请发布您的所有代码。 是的,我同意,这没有任何意义,因此提出了这个问题。如果你想要我的主文件包含另一个具有完整 URL 的文件,请自行测试: main.php: <?php include("example.com/include.php&quot;); ?> include.php: <?php header("位置:example.com/new.php&quot;); ?>这将导致仅重定向包含。是的,这毫无意义,我明白。

以上是关于PHP Header Redirect 问题(不,不是那个常见的问题)的主要内容,如果未能解决你的问题,请参考以下文章

使用php重定向登录页面

我对 PHP Post/Redirect/Get 感到困惑

扭曲的位置标头重定向

PHP获取重定向URL的几种方法

Nginx中proxy_pass/proxy_redirect/proxy_set_header配置说明

PHP微信授权登录信息