Apache2 - url中目錄末尾缺少“/”時重定向301
在請求這樣的 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 文件,而不是可以跟隨。