【发布时间】:2011-12-01 11:58:04
【问题描述】:
这是我在redirect.php 中的代码:(我知道这是不切实际的)
<?php
header("Location: " . $_GET['to']);
?>
这就是问题所在。此页面可以正常工作并正确重定向:
redirect.php?to=http://www.google.com
但是这个没有:
redirect.php?to=http://www.google.com/
问题不在于最后的斜线,这个也不起作用:
redirect.php?to=http://www.google.com/intl/en/about/corporate/index.html
urlencoded GET 请求也没有:
redirect.php?to=http%3A%2F%2Fwww.google.com%2F
但以下错误的确实有效:(注意 http:/ 中的一个斜杠)
redirect.php?to=http:/www.google.com/
redirect.php?to=http:/www.google.com/intl/en/about/corporate/index.html
这会导致我自己的服务器上出现 404 错误(“在我们的服务器上找不到请求的网址 www.google.com...”):
redirect.php?to=www.google.com/
在 Firefox 上,错误显示“与服务器的连接已重置”,Chrome 还显示“错误 101 (net::ERR_CONNECTION_RESET):连接已重置”页面。因此,我看不到服务器发送的标头。实际上它似乎没有发送任何!
有趣的是,当我在本地主机上使用 WampServer 测试所有上述请求时,它们都可以正常工作,但是当我上传它们时,它就不起作用了!标头之前没有输出或 BOM,没有使用代理,所有工作都在端口 80 上完成。可能是我的服务器配置(哪个配置?)问题的根源?
我想不出还有什么可以尝试和试验的。
我已经阅读了一些发送 POST 数据后重定向的问题,但我认为这与这个问题无关。
编辑:
尝试在 Location 标头之前发送 301 / 303 状态标头...没有运气。
打电话给朋友,让他用不同的 PC 和不同的 ISP 进行测试......没有运气。
用 ASCII 编码(而不是 utf8)写了另一个脚本……不走运。
请指出我可以对这个问题进行的其他测试和诊断。
【问题讨论】:
-
如果您尝试
redirect.php?to=www.google.com/并将您的标头设置为header("Location: http://" . $_GET['to']);是否有效? -
您提供传递给redirect.php的参数,但最好提供它生成的标头。使用开发工具查看那些。
-
@positiv:这确实有效,但是有很多对 redirect.php 的引用,并且我的数据库中已经有一个相当大的可重定向链接数据库,我不想更改。
-
@Jon:你能提供更多信息吗?
-
@Col.Shrapnel:实际上没有。我错误地认为他试图传入RFC 1945 中定义的
unsafe组中的字符,这确实是一个问题。
标签: php redirect header get http-status-code-302