Apache-2.2

Apache2 - url中目錄末尾缺少“/”時重定向301

  • April 6, 2014

在請求這樣的 url 時,我並沒有真正注意到這個 Redirect(301),最後沒有斜杠(“/”):http://server/directory

伺服器將響應 301 Redirect Permanent 標頭,其中 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 訪問日誌:

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 連結的末尾添加一個斜杠並接受一些重定向?

你們有什麼感想?

在沒有重定向的情況下發送數據會破壞相關連結。如果http://server/directory包含file,那麼它的完整 URL 將是http://server/directory/file。如果基本 URL 是,指定 like 的連結<a href="file">將指向,但如果基本 URL 只是它,它將指向相反,這不是預期的結果。http://server/directory/file``http://server/directory/``http://server/directory``http://server/file

Apache 可以根據 URL 而不是重定向以兩種不同的方式生成目錄列表。index.html但是,如果目錄中有文件,那將不起作用。因此,Apache 使用的是在這兩種情況下都有效的方法。

這不是一種新行為,十年前 Apache 的行為方式相同。無法處理重定向的客戶端現在應該已經修復。但是對於任何無法處理重定向的客戶端,Apache 應該發送一個帶有連結的小 html 文件,而不是可以跟隨。

引用自:https://serverfault.com/questions/587002