mod_mime

Overview

mod_mime module is used to associate meta information with files by their extensions. Meta information relates the filename of the document to it's mime-type, language, character set and encoding. This information is sent to the browser and participates in content negotiation so the user's preferences are respected when choosing one of several possible files to serve.

Note! Changing the meta information does not imply the change of Last-Modified header value and previously cached copy may still be used by a client or proxy with the previous headers. So, to ensure that all users get the fresh version of the resource it's advisable to visit it and subsequently renew its last modified date.

Files with multiple extensions

Files can have more than one extension and usually the order of the extensions is insignificant. For example, the file index.html.fr maps to content type text/html and language French and the file index.fr.html also maps to exactly the same information. If more than one extension is given that maps onto the same type of meta information, then the one to the right will be used, except for languages and content encodings. For example, if .gif maps to the MIME-type image/gif and .html maps to the MIME-type text/html , then the file welcome.gif.html will be associated with the MIME-type text/html .

Languages and content encodings are treated in the aggregate, because more than one language or encoding may be assigned o a particular resource. For example, the file index.html.en.de will be delivered with Content-Language: en, de and Content-Type: text/html .

Content encoding

In addition to specifying the mime-type for the file it's also possible to encode it to simplify its transmission over the Internet. Generally, encoding implies compression (e.g. gzip ), but it can also be encryption (e.g. pgp ) or encoding such as UUencoding , which is designed for transmitting a binary file in an ASCII (text) format.

By using more than one file extension you can indicate that a file is of a particular type, and also has a particular encoding.

For example, you have a Microsoft Word document which is pkzipped to reduce its size. If the .doc extension is associated with the Microsoft Word file type, and the .zip extension is associated with the pkzip file encoding, then the file Resume.doc.zip would be recognized as a pkzip'ed Word document.

Character sets and languages

Along with file type and encoding there's one more worthy piece of information that is the language of the document and the character set the file should be displayed in. For example, the document might be written in the Chinese or Cyrillic and should be displayed correctly in any case. This information, also, is transmitted in HTTP headers.

The character set, language, encoding and mime type are all used in the process of content negotiation to determine which document to give to the client when there are alternative documents in more than one character set, language, encoding or mime type.

The language of the document is specified in Content-Language header, Content-Type header is used to indicate the charset to be used to correctly display the content.

Example

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

Directives

Name Context Description
AddCharset S V D .h Maps the given filename extensions to the specified content charset
AddEncoding S V D .h Maps the given filename extensions to the specified encoding type
AddHandler S V D .h Maps the filename extensions to the specified handler
AddInputFilter S V D .h Maps filename extensions to the filters that will process client requests
AddLanguage S V D .h Maps the given filename extension to the specified content language
AddOutputFilter S V D .h Maps filename extensions to the filters that will process responses from the server
AddType S V D .h Maps the given filename extensions to the specified content type
DefaultLanguage S V D .h Sets all files in the given scope to the specified language
ModMimeUsePathInfo S V D .h Tells mod_mime to treat path_info components as part of the filename
RemoveCharset S V D .h Removes any character set associations for a set of file extensions
RemoveEncoding S V D .h Removes any content encoding associations for a set of file extensions
RemoveLanguage S V D .h Removes any language associations for a set of file extensions
RemoveOutputFilter S V D .h Removes any output filter associations for a set of file extensions
RemoveType S V D .h Removes any content type associations for a set of file extensions

AddCharset

Maps the given filename extensions to the specified content charset

Syntax

AddCharset charset extension [extension] [...]

Description

AddCharset directive maps listed filename extensions to the specified charset. charset is the MIME charset parameter of filenames containing extension . This mapping is added to others that are already in force and overrides any mappings that already exist for the same extension .

Example

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

With the above config being applied the document smth.ja.jis will be recognized as a Japanese document with ISO-2022-JP charset (the same is true for the xxxx.jis.ja document). Using AddCharset directive is beneficial for the client, as it informs about the character encoding of the document thus favoring its correct interpretation and output, and for content negotiation, as the server obtains a possibility to return the document accounting for the client's charset preferences.

The extension argument is case-insensitive and can be specified with or without a leading dot.

Filenames may have multiple extensions and the extension argument will be compared against each of them.

AddEncoding

Maps the given filename extensions to the specified encoding type

Syntax

AddEncoding MIME-enc extension [extension] [...]

Description

AddEncoding directive maps listed filename extensions to the specified encoding type. MIME-enc is the MIME encoding to be used for documents containing the extension . This mapping is added to others that are already in force and overrides any mappings that already exist for the same extension .

Example:

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

With the above config being applied the filenames containing .gz extension to be marked as encoded using x-gzip encoding, and filenames containing the .Z extension to be marked as encoded with x-compress .

The extension argument is case-insensitive and can be specified with or without a leading dot.

Filenames may have multiple extensions and the extension argument will be compared against each of them.

AddHandler

Maps the filename extensions to the specified handler

Syntax

AddHandler handler-name extension [extension] [...]

AddHandler directive instructs handler-name handler to serve specified extension(s) . This mapping is added to others that are already in force and overrides any mappings that already exist for the same extension .

Example

AddHandler cgi-script .cgi

With the above config being applied any file containing the .cgi extension will be treated as a CGI program.

The extension argument is case-insensitive and can be specified with or without a leading dot.

Filenames may have multiple extensions and the extension argument will be compared against each of them.

AddInputFilter

Maps filename extensions to the filters that will process client requests

Syntax

AddInputFilter filter[;filter...] extension [extension] [...]

AddInputFilter directive maps the filename extension extension to the filters which will process client requests and POST input when they are received by the server. This mapping is merged with others that are already in force and overrides any mappings that already exist for the same extension .

If more than one filter is specified, they must be separated by semicolons in the order in which they must process the content.

The fiter and extension arguments are case-insensitive and can be specified with or without a leading dot.

AddLanguage

Maps the given filename extension to the specified content language

Syntax

AddLanguage MIME-lang extension [extension] [...]

Description

AddLanguage directive maps the given filename extension to the specified content language. MIME-lang is the MIME language of filenames containing extension . This mapping is added to others that are already in force and overrides any mappings that already exist for the same extension .

Example

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

With the above config being applied the document xxxx.en.Z will be treated as being a compressed English document (the same is true for the document xxxx.Z.en ). Although the content language is reported to the client, the browser is unlikely to use this information. The AddLanguage directive is more useful for content negotiation, where the server returns one from several documents based on the client's language preference.

If multiple language assignments are set for the same extension, the last assignment will be applied.

The extension argument is case-insensitive and can be specified with or without a leading dot.

AddOutputFilter

Maps filename extensions to the filters that will process responses from the server.

Syntax

AddOutputFilter filter[;filter...] extension [extension] [...]

Description

AddOutputFilter directive maps the filename extension extension to the filters which will process responses from the server before they are sent to the client. This mapping is merged with others that are already in force and overrides any mappings that already exist for the same extension .

Example

AddOutputFilter INCLUDES;DEFLATE shtml

If more than one filter is specified, they must be separated by semicolons and follow in the order they should process the content. The filter argument is case-insensitive.

The extension argument is case-insensitive and can be specified with or without a leading dot. Filenames may have multiple extensions and the extension argument will be compared against each of them.

AddType

Maps the given filename extensions to the specified content type.

Syntax

AddType MIME-type extension [extension] [...]

Description

AddType directive maps the given filename extensions to the specified content type. MIME-type is the MIME type to use for filenames containing extension. This mapping is added to others that are already in force and overrides any mappings that already exist for the same extension .

Example

AddType image/gif .gif

The extension argument is case-insensitive and can be specified with or without a leading dot.

DefaultLanguage

Sets all files in the given scope to the specified language.

Syntax

DefaultLanguage MIME-lang

DefaultLanguage directive informs Helicon Ape of necessity to interpret all files (that don't have an explicit language extension, e.g. by AddLanguage directive) in the directive's scope in the specified MIME-lang language.

If no DefaultLanguage directive is specified and the file is not assigned any language extensions by AddLanguage , then that file is considered to have no language attribute.

Example

DefaultLanguage en

ModMimeUsePathInfo

Tells mod_mime to treat path_info components as part of the filename.

Syntax

ModMimeUsePathInfo On|Off

Default

ModMimeUsePathInfo Off

Description

ModMimeUsePathInfo directive is used to combine the filename with the path_info URL component to apply mod_mime's directives to the request. The default value is Off , that means that path_info component is ignored.

It's recommentded to utilize this directive when using virtual file system.

Example

ModMimeUsePathInfo On

Say you have a request /bar/foo.shtml where /bar is Location and ModMimeUsePathInfo is On . mod_mime will treat the incoming request as /bar/foo.shtml and directives like AddOutputFilter INCLUDES .shtml will add the INCLUDES filter to the request. If ModMimeUsePathInfo is not set, the INCLUDES filter will not be added.

RemoveCharset

Removes any character set associations for a set of file extensions

Syntax

RemoveCharset extension [extension] [...]

Description

RemoveCharset directive removes any character set associations for files with specified extension(s) . This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or server configuration.

Example

RemoveCharset .html .shtml

The extension argument is case-insensitive and can be specified with or without a leading dot.

RemoveEncoding

Removes any content encoding associations for a set of file extensions

Syntax

RemoveEncoding extension [extension] [...]

Description

RemoveEncoding directive removes any encoding associations for files with specified extension(s) . This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or server configuration.

Example

#in /foo/.htaccess:
AddEncoding x-gzip .gz
AddType text/plain .asc
<Files *.gz.asc>
RemoveEncoding .gz
</Files>

With the above config being applied the file foo.gz will be considered as gzip encoded file, but foo.gz.asc will be considered as unencoded plain text file.

Note! RemoveEncoding directives are processed after any AddEncoding directives, so it is possible they may undo the effects of the latter if both occur within the same directory configuration.

The extension argument is case-insensitive and can be specified with or without a leading dot.

RemoveLanguage

Removes any language associations for a set of file extensions.

Syntax

RemoveLanguage extension [extension] [...]

Description

RemoveLanguage directive removes any language associations for files with specified extension(s) . This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or server configuration.

The extension argument is case-insensitive and can be specified with or without a leading dot.

RemoveOutputFilter

Removes any output filter associations for a set of file extensions

Syntax

RemoveOutputFilter extension [extension] [...]

Description

RemoveOutputFilter directive removes any output filter associations for files with the specified extension(s) . This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or server configuration.

Example

RemoveOutputFilter shtml

The extension argument is case-insensitive and can be specified with or without a leading dot.

RemoveType

Removes any content type associations for a set of file extensions.

Syntax

RemoveType extension [extension] [...]

Description

RemoveType directive removes any MIME type associations for files with specified extension(s) . This allows .htaccess files in subdirectories to undo any associations inherited from parent directories or server configuration.

Example

#in /foo/.htaccess:
RemoveType .cgi

With the above config being applied any special handling of .cgi files in /foo/ directory and any beneath it will be removed.

Note! RemoveType directives are processed after any AddType directives, so it is possible they may undo the effects of the latter if both occur within the same directory configuration.

The extension argument is case-insensitive and can be specified with or without a leading dot.