http路徑映射和重新導向,路徑映射重新導向
主要包括Alias指令、AliasMatch、Redirect、RedirectMatch、ScriptAlias和ScriptAliasMatch。它們由mod_alias模組提供,該模組用於提供簡單的路徑映射和重新導向需求,更複雜的內容見URL重寫。
其中ScriptAlias用法和Alias完全一樣,唯一不同的是ScriptAlias映射的目標路徑被認為是CGI檔案或包含CGI檔案的目錄,它們將會被cgi處理器處理執行。
1.1 處理順序
Redirect、RedirectMatch指令優先於Alias、AliasMatch進行處理;同類型的Redirect或Alias按照出現順序進行匹配,匹配到了立即停止。
例如:如果幾個指令按照下面的順序出現:
Redirect1Alias1AliasMatch2Alias3RedirectMatch2Redirect3
那麼它們匹配的順序為:Redirect1>RedirectMatch2>Redirect3>Alias1>AliasMatch2>Alias3。且一被匹配立即生效,後面的將被忽略。
1.2 Alias和AliasMatch
Alias指令用於將URL路徑映射到本地檔案系統的路徑,且本地路徑不受DocumentRoot的限制。AliasMatch是正則版本的Alias。
Alias "/image" "/ftp/pub/image"
這將使得 http://myserver/image/foo.gif 的請求得到/ftp/pub/image/foo.gif,由於是精確匹配的,所以 http://myserver/imagefoo.gif 不會返回該路徑下的檔案。但Alias有支援正則匹配的指令AliasMatch。
AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"
Alias中如果URL部分包含了尾隨斜線,則映射路徑也應該包含斜線。例如下面的例子,這時如果請求 http://myserver/icons ,將不會得到/usr/local/apache/icons/$DirectoryIndex。
Alias "/icons/" "/usr/local/apache/icons/"
設定了Alias後,需要考慮映射到的本地路徑的許可權是否允許存取。特別是對於DocumentRoot外的路徑,通常會因為< Directory "/">的拒絕而導致這些映射目標不能訪問。所以,對於這樣的映射路徑應該還需要為Alias指令配一個< Directory >容器允許存取。例如:
Alias "/image" "/ftp/pub/image"<Directory "/ftp/pub/image"> Require all granted</Directory>
如果Alias或AliasMatch出現在< Location >容器中,則它們只需要一個映射路徑作為參數即可,因為URL已經包含在容器路徑中。例如:
<Location "/image"> Alias "/ftp/pub/image"</Location>
1.3 Redirect和RedirectMatch指令
它們告知用戶端資源已經轉移,讓它們重新發送對新路徑資源的HTTP請求。
Redirect [status] old-URL new-URL
舊的URL必須是以斜線"/"開頭的絕對路徑,新URL也必須是絕對路徑,但可以是包含了scheme://serverhost的絕對路徑,也可以是使用斜線開頭的絕對路徑。例如:
# 重新導向到不同主機上Redirect "/service" "http://foo2.example.com/service"# 重新導向到相同主機上Redirect "/one" "/two"
如果用戶端請求 http://example.com/service/foo.txt ,將被告知重新去請求 http://foo2.example.com/service/foo.txt 。可以是包含GET參數的URL,例如 http://example.com/service/foo.pl?q=23&a=42 ,將重新導向到 http://foo2.example.com/service/foo.pl?q=23&a=42 。但注意,POST方法會被無視。
如果沒有指定status參數,則重新導向是臨時重新導向(HTTP status 302)。對用戶端來說,此資源的路徑變動是臨時性的。以下幾個status參數可以返回各自不同的HTTP狀態代碼:
- permanent:返回一個永久性重新導向狀態代碼(301),表示此資源的位置變動是永久性的。
- temp:返回一個臨時性重新導向狀態代碼(302),這是預設值。
- seeother:返回一個"參見"狀態代碼(303),表示此資源已經被替代。
- gone:返回一個"已廢棄"狀態代碼(410),表示此資源已經被永久性地刪除了。如果指定了這個狀態代碼,則new-URL參數將被忽略。
status可以被指定為某個數值以返回其他指定狀態代碼。如果此值在300-399之間,則必須提供new-URL參數,否則必須忽略new-URL,但不管如何,值必須是有效http狀態代碼值。
和alias指令一樣,如果寫在Location容器中,則old-URL忽略,因為它已經包含在location容器的路徑中。例如:
<Location "/one"> Redirect permanent "http://example.com/two"</Location><Location "/three"> Redirect 303 "http://example.com/other"</Location><LocationMatch "/error/(?<NUMBER>[0-9]+)"> Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html"</LocationMatch>
回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7634381.html註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支援能激發作者更大的寫作熱情,非常感謝!