IIS7上的PHP-接收“;“移动对象”;html页面,而不是实际重定向

IIS7上的PHP-接收“;“移动对象”;html页面,而不是实际重定向,php,iis,iis-7.5,Php,Iis,Iis 7.5,我正在使用IIS7.5作为web服务器在我的计算机上学习PHP,但在正确完成301重定向时遇到问题 教程和论坛都说要使用以下内容: Header('Location: ' . $url, true, 301); 或 在这两种情况下,浏览器(Chrome和Firefox)显示以下内容,而不是实际重定向: Object Moved This document may be found here 使用FireFox web developer工具栏,我检索了页面标题,它们是: Content-T

我正在使用IIS7.5作为web服务器在我的计算机上学习PHP,但在正确完成301重定向时遇到问题

教程和论坛都说要使用以下内容:

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

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

Object Moved

This document may be found here
使用FireFox web developer工具栏,我检索了页面标题,它们是:

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

为什么页面没有重定向?显示该页面对用户来说是一种冗余和烦人的行为。

我发现了这一点。位置标头必须是自动重定向的绝对路径。如果是相对路径,则不会重定向。

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

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

我在使用绝对URL在IIS7上使用PHP时遇到了这个问题。窃听了我一会儿。确保你把 退出(); 在你 标题('位置:');
标头不会停止执行,否则函数将返回某个可能会产生意外结果的位置。

我想出了一个简单的解决方法。使用出站重定向规则将重定向响应中的内容长度标头设置为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_头=1


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

这实际上是您的浏览器,而不是PHP或服务器配置-HTTP/1.1中要求完整URL,但有些客户端会遵循URI。我在FireFox 3.6和Chrome 10中观察到了相同的结果。IE9什么也没做,只是显示了一个页面错误。好的,我可以看到这删除了整个响应。我从api中获得201创建状态的问题,因此我需要我的api返回新对象及其id。是否有好的“黑客”方法来删除iis吐出的愚蠢html头?您是否尝试过设置条件出站规则?我认为你的评论可能需要回答一个全新的问题,包括所有额外的细节和必要的信息。是的,我就是这么想的。张贴于此:
<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>