mod_mime

mod_mime

exten exten exten

Apache模組 mod_mime

mod_mimemod_mime

說明

根據檔案擴展名決定應答的行為(處理器/過濾器)和內容(MIME類型/語言/字元集/編碼)
狀態基本(B)
模組名mime_module
源檔案mod_mime.c

概述

本模組通過檔案的擴展名將不同的"元信息"與檔案關聯起來。元信息在文檔的檔案名稱與文檔的MIME類型語言字元集編碼方式之間建立關聯。最終元信息會傳送到伺服器並參與內容協商,這樣最終在考慮用戶指定參數的基礎上,在幾個可能的檔案里選擇一個提供服務。關於內容協商的更多信息,請參閱mod_negotiation模組。

AddCharset, AddEncoding, AddLanguage, AddType指令都可以用於在檔案的擴展名與檔案的元信息之間建立映射關係。它們分別指明了文檔的字元集編碼方式語言MIME類型(內容類型)。指令TypesConfig用來指定一個檔案,它也包含了擴展名到MIME類型的映射關係。

另外,mod_mime還可以定義處理器過濾器來生成或處理信息。指令AddHandler, AddOutputFilter, AddInputFilter控制了提供文檔的模組或腳本的運作方式。MultiviewsMatch指令設定mod_negotiation模組在嘗試Multiview匹配時,如何處理檔案擴展名

當mod_mime模組在元信息與檔案的擴展名之間建立映射以後,core提供了一組指令用來建立某個給定範圍內所有相關檔案與特定的元信息之間的關聯。這些指令包括ForceType, SetHandler, SetInputFilter, SetOutputFilter 。core的指令會覆蓋任何在mod_mime模組中定義的檔案擴展名映射。

注意,改變一個檔案的元信息,不會改變Last-Modified頭的值。因此,以前被快取的副本可能還會被用戶或代理伺服器使用。如果改變了元信息(語言、內容類型、字元集、編碼方式),需要"觸及"所有相關檔案(更新他們的最後修改時間),以保證所有的訪問者都收到正確的內容標題。

帶多擴展名的檔案

檔案可以有多個擴展名,這些擴展名的順序一般情況下是無關緊要的。例如:如果檔案welcome.html.fr被映射為內容類型是text/html 、語言是法語的話,檔案welcome.fr.html將被映射為完全相同的內容。如果一個以上的擴展名映射到同種類型的元信息上,那么將使用最右邊的那個。比如:.gif的MIME類型是image/gif 、.html的MIME類型是text/html ,那么welcome.gif.html的MIME類型將是text/html 。

語言和內容編碼會按照積累的方式處理,因為一個檔案可以被指定為多種語言或編碼。因此,welcome.html.en.de檔案將會按照Content-Language: en, de和Content-Type: text/html傳送。

在處理帶多個擴展名的檔案並且這些擴展名同時關聯MIME類型和處理器時,要特別小心。這種情況下通常是由與處理器相關的模組來處理得到結果。比如,檔案擴展名.imap(通過mod_imagemap模組)與imap-file處理器相關聯,同時,.html檔案擴展名的MIME類型是text/html ,那么檔案world.imap.html將同時與imap-file處理器和text/htmlMIME類型相關聯。在處理這種情況的時候,imap-file處理器會被選用,因此,這個檔案會被當作由mod_imagemap模組處理的圖像映射檔案

內容編碼

一個具有特定MIME類型的檔案能夠用一種特定的方法進行額外的編碼,以簡化它在網際網路上的傳輸。這通常指的是壓縮,比如gzip ;也可以是加密,例如pgp ;還可以是像UUencoding那樣的編碼,UUencoding是用來在ASCII(文本)格式的檔案里,傳輸二進制檔案的編碼方式。

HTTP/1.1 RFC第14.11節是這樣解釋的:

實體頭的"Content-Encoding"域是媒體類型的修飾符。如果存在,它的值指明了對實體本身進行額外編碼的方式,以及為了得到"Content-Type"頭所參照的媒體類型而必須採用的解碼機制。"Content-Encoding"主要用來允許一個檔案在不破壞它底層媒體類型的基礎上,進行壓縮。

通過使用一種以上的檔案擴展名(參見上面關於帶多擴展名的檔案一節),可以指定檔案是一種特定的類型,還可以同時指定它特定的編碼方式。

例如,有一個檔案,它是Microsoft Word文檔,同時為了減小它的大小,它還被壓縮了。如果.doc擴展名表示Microsoft Word檔案類型,而.zip擴展名表示pkzip檔案編碼方式,那么檔案Resume.doc.zip就會被認出是一個用pkzip壓縮過的Word文檔。

Apache把一個Content-encoding頭和請求的資源一起傳送,以便告訴瀏覽器資源編碼的方式。

Content-encoding: pkzip

字元集和語言

除了檔案類型和檔案編碼方式外,還有一個重要的信息是檔案的語言以及檔案顯示時的字元集。例如一個文檔可能是用越南語或古斯拉夫語寫的,並且也應該顯示成這種語言。這樣的信息也要在HTTP頭裡進行傳輸。

字元集、語言、編碼方式、內容類型等信息都是用在內容協商(參閱mod_negotiation模組)處理過程中的。它們決定了當許多包含了不同的字元集、語言、編碼方式、內容類型的文檔都存在時,具體將哪個文檔返回給客戶端。所有由AddCharset, AddEncoding, AddLanguage, AddType指令定義的檔案擴展名關聯(還有在MimeMagicFile指令中列出的檔案擴展名)都參與了這個選擇過程。使用AddHandler, AddInputFilter, AddOutputFilter指令建立的關聯,可以用MultiviewsMatch指令來決定參與或不參與匹配。

字元集

為了傳遞更深層次的信息,Apache在傳送一個Content-Language頭以指定文檔語言的基礎上,還在隨後的Content-Type頭中指明了具體的字元集,以便更精確地描述這一信息。

Content-Language: en, fr
Content-Type: text/plain; charset=ISO-8859-1

語言的標識是這個語言名字的二字母縮寫。charset是使用的字元集的精確名字。

AddCharset 指令

說明 在給定的檔案擴展名與特定的字元集之間建立映射
語法 AddCharset charset extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

AddCharset指令在特定的檔案擴展名與特定的字元集之間建立映射。charset是以extension為擴展名的檔案的MIME字元集參數。這個映射關係會強制添加在所有現存的映射關係上,並覆蓋所有現存的extension擴展名映射。

示例
AddLanguage ja .ja
AddCharset EUC-JP .euc
AddCharset ISO-2022-JP .jis
AddCharset SHIFT_JIS .sjis

有了以上定義以後,文檔xxxx.ja.jis會被當成是使用字元集ISO-2022-JP的日文文檔(文檔xxxx.jis.ja也一樣)。AddCharset指令除了用於通知客戶端文檔的字元集編碼方式以便正確地翻譯和顯示以外,還用於內容協商(根據用戶的優先選擇信息,從幾個文檔中選擇一個返回給用戶)。

extension參數是大小寫無關的,並且可以帶或不帶前導點。

參見
mod_negotiation
AddDefaultCharset

AddEncoding 指令

說明 在檔案擴展名與特定的編碼方式之間建立映射關係
語法 AddEncoding MIME-enc extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

AddEncoding指令在檔案擴展名與特定的編碼方式之間建立映射關係。指令定義以extension為擴展名的檔案是由MIME-enc方式編碼的。這個映射關係會添加在所有有效的映射關係上,並覆蓋所有相同的extension擴展名映射。

示例
AddEncoding x-gzip .gz
AddEncoding x-compress .Z

有了上述定義後,包含.gz擴展名的檔案被認為是用x-gzip方式編碼的,而帶.Z擴展名的檔案則被認為是用x-compress方式編碼的。

老的客戶端期望x-gzip和x-compress ,然而,按標準來說,它們分別等同於gzip和compress 。Apache在進行編碼方式映射時,會忽略"x-"前綴。當回響需要包含編碼方式時,Apache會使用客戶端請求的格式(例如:x-foo或foo)來應答。如果客戶端沒有指明特定的格式,Apache會使用AddEncoding指令給定的編碼方式。為了簡化這一問題,你應該為這兩個特定的編碼方式始終使用x-gzip和x-compress 。對於象deflate這樣比較新的編碼方式,指定時不要帶"x-"前綴。

extension參數是大小無關的,並且可以帶或不帶前導點。

AddHandler 指令

說明 在檔案擴展名與特定的處理器之間建立映射
語法 AddHandler handler-name extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

指定帶extension擴展名的檔案應被handler-name處理器來處理。這個映射關係會添加在所有有效的映射關係上,並覆蓋所有相同的extension擴展名映射。例如,為了把擴展名為.cgi的檔案作為CGI腳本來處理,應該定義:

AddHandler cgi-script .cgi

一旦將上述定義放在http.conf檔案中,所有包含.CGI擴展名的檔案,都會被當成是CGI程式。

extension參數是大小無關的,並且可以帶或不帶前導點。

參見
SetHandler

AddInputFilter 指令

說明 在檔案擴展名與特定的輸入過濾器之間建立映射
語法 AddInputFilter filter[;filter...] extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.26 及以後的版本中可用

AddInputFilter指令在檔案擴展名extension與對伺服器收到的客戶請求進行處理與轉發的輸入過濾器之間建立映射。這是除包括SetInputFilter指令在內的所有過濾器定義指令之外的定義。這個映射會與所有有效的定義合併,並覆蓋所有相同的extension擴展名映射。

如果要指定一個以上的過濾器,它們必須用分號來分隔,並按它們處理文檔的順序來排列。filter與extension參數都是大小無關的,extension可以帶或不帶前導點。

參見
RemoveInputFilter
SetInputFilter

AddLanguage 指令

說明 在檔案擴展名與特定的語言之間建立映射
語法 AddLanguage MIME-lang extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

AddLanguage指令在檔案擴展名與特定的語言之間建立映射。指令定義以extension為擴展名的檔案是以MIME-lang語言寫成的。這個映射關係會添加在所有有效的映射關係上,並覆蓋所有相同的extension擴展名映射。

示例
AddEncoding x-compress .Z
AddLanguage en .en
AddLanguage fr .fr

這樣一來,文檔xxxx.en.Z將會被當成是一個壓縮的英文文檔(xxxx.Z.en也一樣)。雖然內容的語言會返回給客戶端,但瀏覽器一般未必會使用這一信息。AddLanguage指令更多的用於內容協商,以決定哪個文檔應當被返回給用戶。

如果同一個擴展名被賦予多個語言,那么使用最後出現的那個。因此在下列情況中:

AddLanguage en .en
AddLanguage en-gb .en
AddLanguage en-us .en

帶.en擴展名的文檔會被當成是en-us 。

extension參數是大小無關的,並且可以帶或不帶前導點。

參見
mod_negotiation

AddOutputFilter 指令

說明 在檔案擴展名與特定的輸出過濾器之間建立映射關係
語法 AddOutputFilter filter[;filter...] extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.26 及以後的版本中可用

AddOutputFilter指令在檔案擴展名extension與對服務將返回給客戶的信息進行處理的輸出過濾器之間建立映射。這是除包括SetOutputFilter和AddOutputFilterByType指令在內的所有過濾器定義指令之外定義。這個映射會與所有有效的定義合併,並覆蓋所有相同的extension擴展名映射。

例如,下述配置會在處理所有.shtml檔案時,進行伺服器端包含,並同時使用mod_deflate模組壓縮後輸出。

AddOutputFilter INCLUDES;DEFLATE shtml

如果要指定一個以上的過濾器,它們必須用分號來分隔,並按它們處理文檔的順序來排列。filter和extension參數都是大小寫無關的,extension可以帶或不帶前導點。

參見
RemoveOutputFilter
SetOutputFilter

AddType 指令

說明 在給定的檔案擴展名與特定的內容類型之間建立映射
語法 AddType MIME-type extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

AddType指令在給定的檔案擴展名與特定的內容類型之間建立映射關係。MIME-type指明了包含extension擴展名的檔案的媒體類型。這個映射關係會添加在所有有效的映射關係上,並覆蓋所有相同的extension擴展名映射。本指令可用來增加沒有在媒體類型檔案(參閱TypesConfig指令)中定義的映射關係。

示例
AddType image/gif .gif

推薦使用AddType指令增加新的媒體類型映射關係,而不是改變TypesConfig檔案。
extension參數是大小無關的,並且可以帶或不帶前導點。

參見
DefaultType
ForceType

DefaultLanguage 指令

說明 為所有檔案設定特定的默認語言
語法 DefaultLanguage MIME-lang
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

DefaultLanguage指令告訴Apache,當該指令作用域範圍內(例如,所有當前指令封裝範圍內)的檔案沒有明確的語言擴展名(例如由AddLanguage指令定義的.fr或.de)時,檔案應該被認為是由MIME-lang語言構成的。舉例來說,這就允許在不必對每個檔案進行重命名的情況下,把整個目錄中的檔案標記為包含荷蘭語內容。注意不同於用擴展名來指定語言,DefaultLanguage指令只能指定一種語言。

如果沒有提供有效的DefaultLanguage指令同時檔案也不包含由AddLanguage定義的語言擴展名,那么該檔案將被認為沒有語言屬性。

示例
DefaultLanguage en

參見
mod_negotiation

ModMimeUsePathInfo 指令

說明 將path_info當成是檔案名稱的一個組成部分
語法 ModMimeUsePathInfo On|Off
默認值 ModMimeUsePathInfo Off
作用域 directory
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.41 及以後的版本中可用

ModMimeUsePathInfo指令用來設定在使用由mod_mime提供的指令時,是否將URL的path_info與檔案名稱結合起來進行處理。默認值為 Off ,也就是說URL的path_info部分被忽略。

當你使用虛擬檔案系統的時候,推薦使用本指令。

示例
ModMimeUsePathInfo On

對/bar/foo.shtml這樣的請求來說,"/bar"是一個位置信息,如果ModMimeUsePathInfo指令為 On ,mod_mime會將請求解析成/bar/foo.shtml ,於是象"AddOutputFilter INCLUDES .shtml"這樣的指令就會使用INCLUDES過濾器來處理這個請求。如果沒有設定ModMimeUsePathInfo指令,則不會使用INCLUDES過濾器。

參見
AcceptPathInfo

MultiviewsMatch 指令

說明 在使用MultiViews查詢所匹配的檔案時要包含的檔案類型
語法 MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers [Handlers|Filters]
默認值 MultiviewsMatch NegotiatedOnly
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.26 及以後的版本中可用

MultiviewsMatch指令在實現mod_negotiation模組的Multiviews功能時,提供了三種不同的處理方法。Multiviews允許對一個檔案的請求,可以用任何在基礎請求後面跟上協商擴展名的情況來匹配,例如:index.html可以用index.html.en, index.html.fr, index.html.gz來匹配。

NegotiatedOnly選項規定每個跟在基礎名字後面的擴展名必須關聯到一個在內容協商時已知的mod_mime擴展名,例如:字元集、內容類型、語言、編碼方式。這是一種最嚴格也是副作用最少的實現方法,它是默認的處理方式。

為了包含與處理器和/或過濾器關聯的擴展名,可以設定MultiviewsMatch指令為Handlers或Filters ,也可以兩個都選。如果其它所有因素都相等,則會選擇最小的那個檔案來提供服務。例如,在一個500位元組的index.html.cgi檔案和一個1000位元組的index.html.pl檔案中做選擇時,.cgi檔案會勝出。如果.asis檔案與asis-handler處理器關聯,對.asis檔案的請求就會使用處理器選項指明的處理器。

即使mod_mime不認識的擴展名,你最終也可以通過使用Any選項來使它匹配用戶的請求。Apaceh1.3就是按這個方式處理的,這會導致無法預測的結果,比如匹配了網站管理員從來不希望使用的.old或.bak檔案。

例如,下面的配置允許在Multviews查詢中使用處理器和過濾器,但會拒絕未知的檔案:

MultiviewsMatch Handlers Filters

參見
Options
mod_negotiation

RemoveCharset 指令

說明 刪除任何給定的擴展名與內容字元集之間的關聯
語法 RemoveCharset extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.24 及以後的版本中可用

RemoveCharset指令刪除任何給定的擴展名與內容字元集之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與內容字元集之間的關聯關係。

extension參數是大小無關的,並且可以帶或不帶前導點。

示例
RemoveCharset .html .shtml

RemoveEncoding 指令

說明 刪除任何給定的擴展名與內容編碼方式之間的關聯
語法 RemoveEncoding extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

RemoveEncoding指令刪除任何給定的擴展名與內容編碼方式之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與內容編碼方式之間的關聯關係。舉例來說,它可以這樣來使用:

/foo/.htaccess:
AddEncoding x-gzip .gz
AddType text/plain .asc

RemoveEncoding .gz

這樣,foo.gz被認為是用gzip方式編碼的,但foo.gz.asc將被認為是一個未編碼的純文本檔案。

注意
RemoveEncoding指令在所有AddEncoding指令之後處理,因此如果在同一個目錄配置里兩者都出現的話,RemoveEncoding指令將會取消後面的AddEncoding指令的作用。

extension參數是大小無關的,並且可以帶或不帶前導點。

RemoveHandler 指令

說明 刪除任何指定擴展名與處理器之間的關聯
語法 RemoveHandler extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

RemoveHandler指令刪除任何指定的擴展名與處理器之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與處理器之間的關聯關係。舉例來說,它可以這樣來使用:

/foo/.htaccess
AddHandler server-parsed .html

/foo/bar/.htaccess
RemoveHandler .html

這樣/foo/bar目錄中的.html檔案將被當成普通檔案來處理,而不是由parsing處理器(參閱mod_include模組)來處理。

extension參數是大小無關的,並且可以帶或不帶前導點。

RemoveInputFilter 指令

說明 刪除指定擴展名與輸入過濾器之間的關聯
語法 RemoveInputFilter extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.26 及以後的版本中可用

RemoveInputFilter指令刪除指定的擴展名與輸入過濾器之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與輸入過濾器之間的關聯關係。

extension參數是大小無關的,並且可以帶或不帶前導點。

參見
AddInputFilter
SetInputFilter

RemoveLanguage 指令

說明 刪除指定的擴展名與內容語言之間的關聯
語法 RemoveLanguage extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 Apache 2.0.24 及以後的版本中可用

RemoveLanguage指令刪除指定的擴展名與內容語言之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與內容語言之間的關聯關係。

extension參數是大小無關的,並且可以帶或不帶前導點。

RemoveOutputFilter 指令

說明 刪除指定擴展名與輸出過濾器之間的關聯
語法 RemoveOutputFilter extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime
兼容性 僅在 2.0.26 及以後的版本中可用

RemoveOutputFilter指令刪除指定的擴展名與輸出過濾器之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與輸出過濾器之間的關聯關係。

extension參數是大小無關的,並且可以帶或不帶前導點。

示例
RemoveOutputFilter shtml

參見
AddOutputFilter

RemoveType 指令

說明 刪除指定擴展名與內容類型之間的關聯
語法 RemoveType extension [extension] ...
作用域 virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

RemoveType指令刪除指定的擴展名與內容類型之間的關聯。子目錄中的.htaccess檔案可以通過這條指令取消從父目錄或伺服器配置檔案中繼承過來的擴展名與內容類型之間的關聯關係。舉例來說,它可以這樣使用:

/foo/.htaccess
RemoveType .cgi

這將刪除/foo/目錄及其所有子目錄下.cgi檔案的特定處理方式,從而使這些檔案按DefaultType指令設定的默認類型來處理。

注意
RemoveType指令會在所有的AddType指令之後處理,因此,當同一個目錄配置中,同時存在這兩種指令的時候,前面的RemoveType指令將會取消後面的AddType指令的作用。

extension參數是大小無關的,並且可以帶或不帶前導點。

TypesConfig 指令

說明 指定mime.types檔案的位置
語法 TypesConfig file-path
默認值 TypesConfig conf/mime.types
作用域 server config
狀態 基本(B)
模組 mod_mime

TypesConfig指令設定MIME類型配置檔案的位置。File-path是相對於ServerRoot的路徑。媒體類型配置檔案列出了檔案擴展名與內容類型的默認映射關係。大多數管理員使用既定的mime.types檔案,它關聯了檔案擴展名和由IANA註冊的內容類型。最新的列表可以在http://www.iana.org/assignments/media-types/index.html得到。這樣做可以大大簡化httpd.conf檔案里的媒體類型定義,在需要時,也可以用AddType指令來更改這些定義。你不應該編輯mime.types檔案,因為在伺服器升級的時候,它會被覆蓋。

檔案包含類似於AddType指令參數格式的行:

MIME-type [extension] ...

擴展名的大小寫是無關緊要的。空行和以井號(#)打頭的行會被忽略。

請不要要求Apache HTTP伺服器項目組在已發布的mime.types檔案中增加新的項,除非(1)它們已經在IANS註冊過了,或者(2)它們被廣泛地使用,並且在多平台上沒有檔案擴展名衝突發生。category/x-subtype請求會被自動拒絕,因為任何新的二字母的擴展名很可能會與已經非常擁擠的語言及字元集名字空間衝突。

參見
mod_mime_magic

相關詞條

相關搜尋

熱門詞條

聯絡我們