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

时间:2009-09-07 18:32:12

标签: apache redirect cgi http-status-code-301

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

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

但这样做:

Location: something/

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

2 个答案:

答案 0 :(得分:2)

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

  

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

这实际上是别的东西:内部重定向。它由the CGI specification定义,适用于从CGI派生的其他一些服务器环境,例如PHP。当Location包含“虚拟路径”时,Apache会立即在该路径中提供页面/脚本,而浏览器不知道存在任何类型的重定向。

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

  

位置:某事/

另一方面,这没什么。它不是一个完整的URL,它不是虚拟路径,因为它不以'/'开头。 Apache不知道如何处理它,所以它只是猜测它不是虚拟路径,因此将其反馈给浏览器而没有进一步的评论。

将“位置”标题中的内容发送到浏览器是无效的,但无论如何它们中的许多都会允许它,这就是为什么它似乎有效。你真的应该传递完整的网址:

Location: http://www.example.com/cgi-bin/mycgi.exe/something/

答案 1 :(得分:0)

1)为了清楚起见,重定向功能(例如“在查看时应该做什么”位置:http响应)在浏览器中,而不是在Apache中。我假设你知道但是想确保它清楚。它与此相关的原因是因为as per the RFC,301响应中的地址需要是“单个绝对URI”。因此,您的URI示例缺少您的域名,例如需要http://your.web.server/cgi-bin/mycgi.exe/something/

虽然某些网络客户端接受具有相对重定向的301,但其他客户端则不接受。

2)您能否详细说明“不工作”的含义,包括客户端错误和Apache日志中的任何错误?感谢

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

由于