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"); ?> include.php: <?php header("位置:example.com/new.php"); ?>这将导致仅重定向包含。是的,这毫无意义,我明白。以上是关于PHP Header Redirect 问题(不,不是那个常见的问题)的主要内容,如果未能解决你的问题,请参考以下文章