httpd

官方reference:http://httpd.apache.org/docs/2.4/en/urlmapping.html


httpd主要是一個靜態文件服務器。當然不限於此,通過各種mod,httpd也可以作爲一個前端服務器,把請求轉發到servlet container、cgi等。不過主要還是靜態文件服務器,所以官方的reference也是從處理靜態文件說起 

1. DocumentRoot 

首先要把瀏覽器裏的url,映射到server的文件系統上 

這是通過DocumentRoot directive配置的(httpd的各種配置,都是用directive完成的,各種mod提供了不同的directive) 

DocumentRoot "/usr/local/httpd/htdocs"

這裏把url的"/",映射到了/usr/local/httpd/htdocs目錄下,比如: 

http://localhost/helloword,會映射到/usr/local/httpd/htdocs/helloword這個文件 

http://localhost/web/,會映射到/usr/local/httpd/htdocs/web/這個文件夾下(區別在於結尾的"/") 

2. DirectoryIndex 

另外有一個directive叫做DirectoryIndex,是用來自動處理文件夾的 
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

這樣配置之後,如果url請求訪問一個目錄,則httpd會先到這個目錄下尋找index.html,找到則返回;如果沒有找到,則顯示目錄列表 

這也是爲什麼,訪問http://localhost,會顯示success page 


3. 文件和文件夾 

這裏有一個問題,http://localhost/servlet,httpd怎麼知道請求的是servlet文件,還是servlet目錄呢? 

一般來說,如果結尾有"/",就認爲請求的是目錄;否則認爲是文件。但是httpd做了一些透明處理,可能會造成誤導 

http://localhost/servlet/,這種情況比較簡單。如果在DocumentRoot下存在servlet目錄,則匹配成功;找不到則直接返回404 

http://localhost/servlet,稍微有點不一樣: 
如果在DocumentRoot下存在文件,則返回; 
如果沒有文件,但是有servlet文件夾,則會透明地當作文件夾處理; 
如果都沒有,纔會返回404 

4. 映射到其他文件夾 

也可以通過Alias和AliasMatch,配置特定的URL不在DocumentRoot下,而是到別的地方查找。不過實踐發現會返回403,不知道是爲什麼,網上也有很多人碰到這個問題。有空再研究下,今天先跳過了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章