Apache HTTP服务器 2.0版本
说明: | 将请求文件的文件扩展名与文件的处理(处理器、过滤器)及内容(mime类型,语言,字符集和编码方式)关联起来。 |
---|---|
状态: | Base |
模块名: | 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
服务提供了一组指令用来建立某个给定范围(例如,<Location>
, <Directory>
, 或 <Files>
)里的所有相关文件与特定的元信息之间的关联。这些指令包括ForceType
, SetHandler
, SetInputFilter
, 和 SetOutputFilter
。Core的指令会覆盖任何在mod_mime
模块中定义的文件扩展名映射。
注意改变一个文件的元信息,不会改变Last-Modified
标题的值。因此,以前被缓冲的复本可能还会被用户或代理服务器使用。如果你改变了元信息(语言,内容类型,字符集或编码方式),你需要'touch'所有相关的文件(更新他们最后修改的时间),来保证所有的访问者都收到正确的内容标题。
文件可以有一个以上的扩展名,这些扩展名的顺序一般情况下是无关紧要的。例如:如果文件welcome.html.fr
被映射为内容类型是text/html
,语言是法语的话,文件welcome.fr.html
将被映射为完全相同的内容。如果一个以上的扩展名映射到同种类型的元信息上,那么将使用最右边的那个。例如,.gif
的MIME类型是image/gif
,而.html
的MIME类型是text/html
,那么文件welcome.gif.html
的MIME类型是text/html
。
在处理带多个扩展名的文件,并且这些扩展名同时相关MIME类型和模块处理器时,要特别小心。这种情况通常是由与处理器相关的模块来处理得到结果。例如:如果文件扩展名.imap
(通过mod_imap
模块)与imap-file
处理器相关联,同时,.html
文件扩展名的MIME类型是text/html
,那么文件world.imap.html
将同时与.imap
处理器和text/html
MIME类型相关联。在处理这种情况的时候,imap-file
处理器会被选用,因此,这个文件会被当作由模块mod_imap
模块处理的图像映射文件。
一个具有特定MIME类型的文件能够用一种特定的方法进行额外的编码,以便简化它在互联网上的传输。这通常指的是压缩,比如gzip
,它也可以是加密,例如pgp
或是象UUencoding
那样的编码,UUencoding是用来在ASCII(文本)格式的文件里,传输二进制的文件的编码方式。
HTTP/1.1 RFC,第14.11节是这样来解释的:
实体标题的内容编码域是媒体类型的修饰符。如果存在,它的值指明了对实体的本身进行额外编码的方式,以及为了得到内容类型标题域所参照的媒体类型,而必须采用的解码机制。内容编码主要用来允许一个文件在不破坏它底层媒体类型的基础上,进行压缩。
通过使用一种以上的文件扩展名(参见上面关于带多扩展名的文件一节),你可以指定文件是一种特定的类型,还可以同时指定它的特定的编码方式。
例如,你有一个文件,它是Microsoft Word文档,同时为了减小它的大小,它还被压缩了。如果.doc
扩展名表示Microsoft Word文件类型,而.zip
扩展名表示pkzip文件编码方式,那么文件Resume.doc.zip
就会被认出是一个用pkzip压缩过的Word文档。
Apache把一个内容编码
标题和请求的资源一起发送,以便告诉客户端浏览器资源编码的方式。
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
语言的标识是这个语言名字的二字母缩写。字符集
的标识是使用的字符集的精确名字。
说明: | 在给定的文件扩展名与内容字符集之间建立映射 |
---|---|
语法: | AddCharset charset extension
[extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
AddCharset
指令为给定的文件扩展名与特定的内容字符集建立映射。指令定义包含extension扩展名的文件是采用charset字符集的。这个映射关系会添加在所有有效的映射关系上,并覆盖所有相同的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 参数是大小无关的,并且可以带也可以不带先导的点。
说明: | 在文件扩展名与特定的编码方式间建立映射关系 |
---|---|
语法: | AddEncoding MIME-enc extension
[extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | 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 handler-name extension
[extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
指定带extension扩展名的文件应被handler-name处理器 来处理。这个映射关系会添加在所有有效的映射关系上,并覆盖所有相同的extension扩展名映射。例如:为了把扩展名为.cgi
的文件作为CGI脚本来处理,你应该定义:
AddHandler cgi-script .cgi
一旦以上的定义放在你的http.conf文件中,所有包含.cgi
扩展名的文件,都会被当成是CGI程序。
extension 参数是大小无关的,并且可以带也可以不带先导的点。
说明: | 在文件扩展名与处理客户请求的输入过滤器间建立映射 |
---|---|
语法: | AddInputFilter filter[;filter...]
extension [extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | AddInputFilter只在Apache 2.0.26及以后的版本中存在。 |
AddInputFilter
指令在文件扩展名extension与对服务器收到的客户请求进行处理与转发的输入过滤器间建立映射。这是除包括SetInputFilter
指令在内,所有过滤器定义指令之外定义。这个映射会与所有有效的定义合并,并覆盖所有相同的extension扩展名映射。
如果要指定一个以上的过滤器,它们必须用分号来分隔,并按它们处理文档的顺序来排列。filter与extension参数都是大小无关的,extension可以带也可以不带先导的点。
说明: | 在文件扩展名与特定的内容语言间建立映射 |
---|---|
语法: | AddLanguage MIME-lang extension
[extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | 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-uk .en
AddLanguage en-us .en
带.en
扩展名的文档会被当成是en-us
。
extension 参数是大小无关的,并且可以带也可以不带先导的点。
说明: | 在文件扩展名与处理从服务端返回信息的输出过滤器间建立映射关系 |
---|---|
语法: | AddOutputFilter filter[;filter...]
extension [extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | AddOutputFilter只在Apache 2.0.26及以后的版本中存在 |
AddOutputFilter
指令在文件扩展名extension与对服务将返回给客户的信息进行处理的输出过滤器间建立映射。这是除包括SetOutputFilter
和 AddOutputFilterByType
指令在内,所有过滤器定义指令之外定义。这个映射会与所有有效的定义合并,并覆盖所有相同的extension扩展名映射。
例如,下列的配置会在处理所有的.shtml
文件时,进行服务器端包含,并同时使用mod_deflate
模块压缩后输出。
AddOutputFilter INCLUDES;DEFLATE shtml
如果要指定一个以上的过滤器,它们必须用分号来分隔,并按它们处理文档的顺序来排列。filter与extension参数都是大小写无关的,extension可以带也可以不带先导的点。
说明: | 在给定的文件扩展名与特定的内容类型间建立映射 |
---|---|
语法: | AddType MIME-type extension
[extension] ... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
AddType
指令在给定的文件扩展名与特定的内容类型间建立映射关系。MIME-type指明了包含extension扩展名的文件的媒体类型。这个映射关系会添加在所有有效的映射关系上,并覆盖所有相同的extension扩展名映射。本指令可用来增加没有在媒体类型文件(参阅TypesConfig
指令)中定义的映射关系。
AddType image/gif .gif
AddType
指令增加新的媒体类型映射关系,而不是改变TypesConfig
文件。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 为所有指令作用域范围内的文件设定某一特定的缺省语言 |
---|---|
语法: | DefaultLanguage MIME-lang |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
DefaultLanguage
指令告诉Apache,当指令作用域范围(例如,所有当前<Directory>
指令封装范围内的所有文件)的文件没有明确的语言扩展名(例如由AddLanguage
指令定义的.fr
或.de
)时,文件应该被认为是由MIME-lang语言构成的。举例来说,这就允许在不必对每个文件进行重命名的情况下,把整个目录中的文件标记为包含荷兰语内容。注意不同于用扩展名来指定语言,DefaultLanguage
指令只能指定一种语言。
如果没有提供有效的DefaultLanguage
指令,同时文件也不包含由AddLanguage
指令定义的语言扩展名,那么这个文件被认为是没有语言属性的。
DefaultLanguage en
说明: | 指定mod_mime将path_info当成是文件名的一个组成部分 |
---|---|
语法: | ModMimeUsePathInfo On|Off |
默认值: | ModMimeUsePathInfo Off |
上下文: | 目录 |
状态: | Base |
模块: | mod_mime |
兼容性: | 只在Apache 2.0.41及更新的版本中存在。 |
ModMimeUsePathInfo
指令用来设定调用mod_mime
的指令时,是否将URL的路径信息与文件名结合起来进行处理。缺省值为Off
,也就是说URL的path_info
部分被忽略。
当你使用虚拟文件系统的时候,推荐使用本指令。
ModMimeUsePathInfo On
对/bar/foo.shtml
这样的请求来说,/bar
是一个位置信息,如果ModMimeUsePathInfo
指令为On
,mod_mime
会将请求解析成/bar/foo.shtml
,那么象AddOuptputFilter INCLUDES .shtml
这样的指令会使用INCLUDES
过滤器来对这个请求进行处理。如果ModMimeUsePathInfo
指令没有设定,那么就不会使用INCLUDES
过滤器。
说明: | 在使用MultiViews查询所匹配的文件时所包含的文件类型 |
---|---|
语法: | MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
[Handlers|Filters] |
默认值: | MultiviewsMatch NegotiatedOnly |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | 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
选项来使它匹配用户的请求。Apaceh 1.3就是按这个方式处理的,这会导致无法预测的结果,比如匹配了网站管理员从来不希望使用的.old或.bak文件。
例如,下面的配置允许在Multviews查询中使用处理器和过滤器,但会拒绝未知的文件:
MultiviewsMatch Handlers Filters
说明: | 删除任何给定的扩展名与内容字符集之间的关联 |
---|---|
语法: | RemoveCharset extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | RemoveCharset只在Apache 2.0.24及更新的版本中存在。 |
RemoveCharset
指令删除任何给定的扩展名与内容字符集之间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与内容字符集之间的关联关系。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
RemoveCharset .html .shtml
说明: | 删除任何给定的扩展名与内容编码方式间的关联 |
---|---|
语法: | RemoveEncoding extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
RemoveEncoding
指令删除任何给定的扩展名与内容编码方式间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与内容编码方式之间的关联关系。举例来说,它可以这样来使用:
AddEncoding x-gzip .gz
AddType text/plain .asc
<Files *.gz.asc>
RemoveEncoding .gz
</Files>
这样,foo.gz
被认为是用gzip方式编码的,但foo.gz.asc
被认为是一个未编码的纯文本文件。
RemoveEncoding
指令在所有的AddEncoding
指令之后处理,因此如果在同一个目录配置里两者都出现的话,RemoveEncoding
指令会取消后面的AddEncoding
指令的作用。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 删除任何指定扩展名与处理器间的关联 |
---|---|
语法: | RemoveHandler extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
RemoveHandler
指令删除任何指定的扩展名与处理器间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与处理器之间的关联关系。举例来说,它可以这样来使用:
AddHandler server-parsed .html
RemoveHandler .html
这样/foo/bar
目录中的.html
文件将被当成普通文件来处理,而不是由parsing处理器(参阅mod_include
模块)来处理。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 删除指定扩展名与输入过滤器之间的关联 |
---|---|
语法: | RemoveInputFilter extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | RemoveInputFilter is only available in Apache 2.0.26 and later. |
RemoveInputFilter
指令删除指定的扩展名与输入过滤器之间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与输入过滤器之间的关联关系。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 删除指定的扩展名与内容语言之间的关联 |
---|---|
语法: | RemoveLanguage extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | RemoveLanguage is only available in Apache 2.0.24 and later. |
RemoveLanguage
指令删除指定的扩展名与内容语言之间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与内容语言之间的关联关系。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 删除指定扩展名与输出过滤器之间的关联 |
---|---|
语法: | RemoveOutputFilter extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
兼容性: | RemoveOutputFilter is only available in Apache 2.0.26 and later. |
RemoveOutputFilter
指令删除指定的扩展名与输出过滤器之间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与输出过滤器之间的关联关系。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
RemoveOutputFilter shtml
说明: | 删除指定扩展名与内容类型之间的关联 |
---|---|
语法: | RemoveType extension [extension]
... |
上下文: | 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_mime |
RemoveType
指令删除指定的扩展名与内容类型之间的关联。子目录中的.htaccess
文件可以通过这条指令取消从父目录或服务器配置文件中继承过来的扩展名与内容类型之间的关联关系。举例来说,它可以这样来使用:
RemoveType .cgi
这将删除/foo
目录及其所有子目录下.cgi
文件的特定处理方式,从而使这些文件按DefaultType
指令设定的缺省类型来处理。
extension 参数是大小写无关的,并且可以带也可以不带先导的点。
说明: | 指定mime.types文件的位置 |
---|---|
语法: | TypesConfig file-path |
默认值: | TypesConfig conf/mime.types |
上下文: | 服务器配置 |
状态: | Base |
模块: | mod_mime |
TypesConfig
指令设定媒体类型配置文件的位置。File-path路径是相对于ServerRoot
目录的。媒体类型配置文件列出了文件扩展名与内容类型的缺省映射关系。大多数管理员使用既定的mime.types
列表文件,它关联了文件扩展名和由IANA注册的内容类型。最新的列表可以在http://www.isi.edu/in-notes/iana/assignments/media-types/media-types得到。这样做可以大大简化httpd.conf
文件里的媒体类型定义,在需要时,也可以用AddType
指令来更改这些定义。你不应该编辑mime.types
文件,因为在服务器升级的时候,它会被覆盖。
文件包含类似于AddType
指令参数格式的行:
MIME-type [extension] ...
扩展名的大小写是无关紧要的。空行以前以井号(#
)打头的行会被忽略。
mime.types
文件中增加新的项,除非(1)它们已经在IANS注册过了,或者(2)它们被广泛地使用,并且在多平台上没有文件扩展名冲突发生。category/x-subtype
请求会被自动拒绝,因为任何新的二字母的扩展名很可能会与已经非常拥挤的语言及字符集名字空间冲突。