我在Windows上以控制台模式运行Apache 2.2.13。我制作了一个处理请求的可执行文件。在某种情况下,当它检测到指向目录但没有斜杠的URL时,它会尝试重定向到附加缺少斜杠的同一URL。退出代码设置为301.奇怪的是,在响应头中使用此代码不起作用:
Location: /cgi-bin/mycgi.exe/something/
但这样做:
Location: something/
我做错了吗?或者我发现了Apache中的错误? (如果是这样,我应该在哪里以及如何发布它?)
答案 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日志中的任何错误?感谢
此外,请指定以下哪些网址可以在客户端使用,哪些不能:
由于