Apache2-301在URL目录末尾缺少“ /”时重定向


13

我在请求这样的网址时没有真正注意到此Redirect(301),而该网址结尾没有slash(“ /”): http://server/directory

服务器将使用301重定向永久标头和Location标头定位到进行响应http://server/directory/

请参见以下示例:

用户要求:

GET /social HTTP/1.1
( http://192.168.1.111/social )

Apache服务器响应:

HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/

用户要求:

GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )

Apache服务器响应:

HTTP/1.1 200 OK

Apache access.log:

192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"

/ social /目录包含一个index.html文件。

Apache软件:Apache/2.2.22 (Ubuntu)
目录选项:Options Indexes FollowSymLinks MultiViews

因此,我的问题是:为什么Apache会这样做?以及如何防止重定向并index.html直接发送出去?客户必须发送两个请求,这实际上是不必要的。也许某些客户端不允许重定向,并且如果没有结尾斜杠(“ /”),将无法访问该站点。

我不想禁用重定向。我不希望服务器直接发送响应而没有任何重定向。即使要求/social

apache旨在重定向那些请求吗?服务器可以直接发送数据而无需重定向,对吗?我应该使用mod_rewrite来防止这种情况吗?还是其他配置?还是应该让它像这样,并在所有html链接的末尾添加一个斜杠并进行一些重定向?

你们有什么感想?


我认为您必须澄清为什么要禁用此功能。/social在您的示例中,唯一合理的替代方法是使用404进行响应。
哈坎林克韦斯特

我不想禁用它,只是阻止重定向。我希望服务器输出index.html无重定向
Jonathan Gurebo 2014年

通过“ this”,我指的是从错误的URL重定向到正确的URL的正常行为。请参阅@kasperd的答案,以了解从eg提供服务的内容可能是个不好的主意/social。(而且,通常,通常不希望在多个URL上提供相同的内容。)
HåkanLindqvist 2014年

Answers:


10

在没有重定向的情况下发送数据会破坏相对链接。如果http://server/directory包含file,则该URL的完整URL为http://server/directory/file。如果基本URL是,则指定为的链接<a href="file">将指向,但是如果仅是基本URL,则它将指向,这不是预期的结果。http://server/directory/filehttp://server/directory/http://server/directoryhttp://server/file

Apache可以根据URL(而不是重定向)以两种不同的方式生成目录列表。但是,如果index.html目录中有文件,则将无法正常工作。因此,Apache使用的是这种方法,在两种情况下都可以使用。

这不是什么新行为,十年前Apache的行为也是如此。不能处理重定向的客户端应该已经修复。但是对于任何无法处理重定向的客户端,Apache应该发送带有链接的小html文件,而该链接可以被跟随。


这不能回答问题。没错,相对链接可能会断开。但是,如果某人想为路径传递内容时不带斜杠,那么他们可能对此有原因,例如,将POST请求发送到Web服务时。Web服务中没有相对链接,重定向将导致POST正文丢失。
傅满洲博士

9

mod_dir添加此重定向,您可以使用DirectorySlash Off指令禁用它。

但是请注意,禁用尾部斜杠重定向可能会导致某些页面中断。如果返回的页面包含相对链接,那么如果在不带尾部斜杠的情况下提供页面,则这些URL的解析方式会有所不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.