2

我在 Windows 上以控制台模式运行 Apache 2.2.13。我制作了一个处理请求的可执行文件。在某些情况下,当它检测到指向目录但没有尾部斜杠的 URL 时,它会尝试重定向到附加了缺少的斜杠的相同 URL。退出代码设置为 301。奇怪的是,在响应标头中包含此代码不起作用:

Location: /cgi-bin/mycgi.exe/something/

但这确实:

Location: something/

难道我做错了什么?还是我在 Apache 中发现了一个错误?(如果是这样,我应该在哪里以及如何最好地发布它?)

4

2 回答 2

2

通常,“位置”包含完整的 URL,包括 http: 和主机名。这是DVK概述的情况。

位置:/cgi-bin/mycgi.exe/something/

这实际上是另一回事:内部重定向。它是由CGI 规范定义的,并且可以在从 CGI 派生的一些其他服务器环境中工作,例如 PHP。当 Location 包含“虚拟路径”时,Apache 会立即在该路径中提供页面/脚本,而浏览器不知道有任何类型的重定向。

显然这不是您想要的,因为当浏览器永远不会看到它是 301 时,执行 301 内部重定向是没有意义的。

地点:某事/

另一方面,这没什么。它不是完整的 URL,也不是虚拟路径,因为它不以“/”开头。Apache 不知道如何处理它,所以它只是猜测它不是虚拟路径,所以将它吐回浏览器,没有进一步的评论。

在“位置”标头中将其发送到浏览器是无效的,但其中许多无论如何都会允许它,这就是它看起来有效的原因。真的,您应该传递完整的 URL:

Location: http://www.example.com/cgi-bin/mycgi.exe/something/
于 2009-09-07T19:52:30.453 回答
0

1) 需要明确的是,重定向功能(例如“看到”位置:http 响应时要做什么)在您的浏览器中,而不是在 Apache 中。我假设您知道这一点,但想确保清楚。它在这里相关的原因是因为根据 RFC,301 响应中的地址需要是“单个绝对 URI”。所以您的 URI 示例缺少您的域名,例如需要是http://your.web.server/cgi-bin/mycgi.exe/something/

虽然一些 Web 客户端接受带有相对重定向的 301,但其他客户端不接受。

2)您能否准确说明“不起作用”的含义,包括客户端错误和Apache日志中的任何错误?谢谢

此外,请指定以下哪些 URL 可在客户端使用,哪些不能:

谢谢

于 2009-09-07T18:54:18.170 回答