2011-03-21 23 views
5

我正在使用IIS7.5作为Web服务器在我的计算机上学习PHP,并且在正确完成301重定向时出现问题。在IIS7上的PHP - 接收“Object Moved”html页面而不是实际重定向

的教程和论坛上都表示要使用以下命令:

Header('Location: ' . $url, true, 301); 

OR

Header('Location: ' . $url); 

在这两种情况下,而不是实际重定向,浏览器(Chrome和Firefox)显示此:

Object Moved 

This document may be found here 

使用FireFox Web开发者工具栏,我检索了页面标题,它们是:

Content-Type: text/html; charset=UTF-8 
Server: Microsoft-IIS/7.5 
X-Powered-By: PHP/5.3.5, ASP.NET 
Date: Mon, 21 Mar 2011 18:47:35 GMT 
Content-Length: 123 

301 Moved Permanently 

为什么页面不重定向?显示那个页面对用户来说是多余的,烦人的。

回答

3

我想通了。位置标题必须是自动重定向的绝对路径。如果它是一个相对路径,它不会重定向。

+0

它实际上是您的浏览器而不是PHP或您的服务器配置 - 完整URL的要求是HTTP/1.1的一部分,但有些客户端会遵循URI。 – 2011-03-21 19:31:09

+0

我在FireFox 3.6和Chrome 10中观察到相同的结果.IE9根本没有做任何事情,它只是显示一个页面错误。 – 2011-03-22 17:10:36

3

我有类似的问题,但路径已经是绝对的。我通过在位置之前专门发送301头来解决这个问题。 PHP应该检测重定向并自动执行此操作,但没有执行此操作。

header("HTTP/1.1 301 Moved Permanently"); 
header("location:http://www.mysite.com/mypage.php"); 
2

我有这个问题,使用绝对URL在IIS7上使用PHP。有一阵子让我感到困扰。确保你把 exit(); 您的 标题('Location:https://domain.tld/resource'); 头不会停止执行,并且该函数将以其他方式返回给出可能意外结果的地方。

0

我想出了一个简单的方法来解决这个问题。使用出站重定向规则将重定向响应中的内容长度标头设置为0.浏览器将根据内容长度标头自动截断发送的响应正文。

这里是我的重定向规则:

<rewrite> 
    <outboundRules> 
     <rule name="Remove Content from Redirect Requests" preCondition="Is30xStatus" enabled="true" patternSyntax="Wildcard"> 
      <match serverVariable="RESPONSE_CONTENT_LENGTH" pattern="*" /> 
      <action type="Rewrite" value="0" /> 
     </rule> 
     <preConditions> 
      <preCondition name="Is30xStatus"> 
       <add input="{RESPONSE_STATUS}" pattern="^30[1-8]$" /> 
      </preCondition> 
     </preConditions> 
    </outboundRules> 
</rewrite> 

我会建议使用作为参考,使用IIS管理器作为编辑的web.config文件直接可以有意想不到的结果创建一个新的出站重写规则。

更新: 显然没有改变标题的格式,以帮助这个问题,以及一个PHP指令:

配置选项cgi.rfc2616_headers = 1

我有我的服务器上进行了测试,这似乎也有助于解决这个问题。

+0

好的,我可以看到这消除了整个回应。我从我的api获得了201创建状态的问题,所以我需要我的api返回新对象及其ID。有没有什么好的“黑客”来删除iis吐出的愚蠢的html头文件? – roemhildtg 2016-11-02 21:00:24

+0

您是否尝试过设置有条件的出站规则?我认为你的评论可能需要一个全新的问题,并提供所有需要回答的额外细节和信息。 – Chaoix 2016-11-04 13:35:50

+0

是的,这就是我的想法。张贴在这里:https://forums.iis.net/p/1234223/2126740.aspx?Re+Python+REST+API+Status+201+Create+IIS+Adds+HTML – roemhildtg 2016-11-04 15:09:49

相关问题