Apache CGI 重定向到绝对 URI 不起作用

2023-12-31

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

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

但这确实:

Location: something/

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


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

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

这实际上是别的东西:内部重定向。它的定义是CGI规范 http://hoohoo.ncsa.illinois.edu/cgi/out.html并可以在其他一些源自 CGI 的服务器环境中工作,例如 PHP。当 Location 包含“虚拟路径”时,Apache 会立即在该路径中提供页面/脚本,而浏览器不知道存在任何类型的重定向。

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

地点:某处/

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

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

Location: http://www.example.com/cgi-bin/mycgi.exe/something/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache CGI 重定向到绝对 URI 不起作用 的相关文章

随机推荐