http路徑映射和重新導向,路徑映射重新導向

來源:互聯網
上載者:User

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註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支援能激發作者更大的寫作熱情,非常感謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.