デフォルトのcharsetを変える場合はAddDefaultCharsetで指定する。 AddDefaultCharsetはtext/plainあるいはtext/htmlに適用される。 拡張子別に指定する場合は、AddCharsetを用いる。
AddDefaultCharset utf-8 AddCharset utf-8 .xhtml AddCharset utf-8 .xml AddCharset utf-8 .rdf
このように設定するとMIME Typeがtext/plain, text/htmlのファイルおよび.xhtml, .xml, .rdfの拡張子を持つファイルの場合はcharsetにutf-8が設定される。 AddDefaultCharset Offにすると設定を無効にできる。
AddEncodingを設定することでレスポンスの内容エンコーディング(Content-Encoding)を指定できる。 例えば.diff.gzの拡張子を持つファイルについて、AddEncodingで内容エンコーディングにgzipやcompressを指定して返せば、UA側では解凍した状態で表示するようになる。
<FilesMatch "\.diff\.gz$">
AddEncoding x-gzip .gz
ForceType "text/plain"
</FilesMatch>
設定の各行の詳細な意味は次のとおり。
このようにすると、UA側では受け取ったレスポンスをgzipで解凍し、text/plainとして表示する。 ただし、Firefox 2.0ではプレインテキストとして表示するが、IE 7.0ではファイルのダウンロードの動作となってしまう(Content-Typeではなく拡張子の.diff.gzを見て表示出来ない形式として判断しているため?)。
XHTMLなどをapplication/xhtml+xmlとして配信する場合に、Microsoft Internet Explorer(6.0, 7.0)などのapplication/xhtml+xmlに対応していない(または望ましくない挙動をする)UAからのリクエストに対しては、Content-Typeをtext/htmlにする方法。
AddType "application/xhtml+xml" .xhtml
RewriteEngine on
RewriteCond %{LA-F:REQUEST_FILENAME} \.xhtml$
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE.6\.0
RewriteRule .* - "[T=text/html; charset=utf-8]"
設定の各行の詳細な意味は次のとおり。
このように設定することで、Acceptヘッダにapplication/xhtml+xmlを含まないUAかIE 6.0が拡張子.xhtmlファイルをリクエストした場合にtext/htmlで返すようになる。 IE 6.0はAcceptヘッダにapplication/xhtml+xmlを載せたリクエストを送って来るが、application/xhtml+xmlで返しても正しく表示されないのでtext/htmlとして返すようにしている。 参考:XHTML1.1と application/xhtml+xml - Blog - Gertrud
URLにCGI等のスクリプトファイル名を指定しないでクエリだけが指定されている場合に、そのリクエストを別のスクリプトにリダイレクトする例。
RewriteCond %{QUERY_STRING} .+
RewriteRule ^$ /moved.cgi [L,R=301,QSA]
設定の各行の詳細な意味は次のとおり。
このように設定すると、リクエストURI"/?foo=bar"は"/moved.cgi?foo=bar"にリダイレクトされる。 この例ではクエリ文字列に何も含まない場合はリダイレクトされない(リクエストURI"/"は"/moved.cgi"にリダイレクトされない)が、何も含まれていない場合でもリダイレクトしたい場合は、
RewriteCond %{QUERY_STRING} .*
とする。
mod_autoindexのカスタマイズに関するメモ。 参考資料: mod_autoindex - Apache HTTP サーバ
まず、アイコンが表示されるためには、IndexOptionsディレクティブにFancyIndexingが設定されていなければならない。
IndexOptions FancyIndexing ...
次に、ファイルの種類を表すアイコンを変えるには、AddIconディレクティブを使用する。 これは、表示するアイコンを拡張子毎に設定するためのもので、MIMEタイプ毎にアイコンを設定するAddIconByTypeというディレクティブも存在する。 以下は設定例(ここではiconsディレクトリ以下にアイコンファイルが格納されているものとする)。
# image AddIcon /icons/image.png .png .gif .jpg .bmp .psd # audio AddIcon /icons/sound.png .mp3 .wav .wma # movie AddIcon /icons/video.png .wmv .avi .mpg # text, document AddIcon /icons/html.png .html .shtml .htm AddIcon /icons/text.png .txt .log AddIcon /icons/document.png .xsl .ppt .doc # archive, compressed AddIcon /icons/tar.png .tar AddIcon /icons/compressed.png .Z .z .tgz .gz .zip .lzh .rar # executive, object AddIcon /icons/binary.png .bin AddIcon /icons/winexec.png .exe .dll AddIcon /icons/shellscript.png .sh .shar .csh .ksh .tcl .bat # special AddIcon /icons/up.png .. AddIcon /icons/folder.png ^^DIRECTORY^^ AddIcon /icons/blank.png ^^BLANKICON^^ # default DefaultIcon /icons/unknown.png
^^DIRECTORY^^はディレクトリを表すアイコン、^^BLANKICON^^はヘッダ部分のアイコンを設定するものを表す。 DefaultIconディレクティブを使用すると、AddIconで設定したいずれの条件にも該当しなかった場合のアイコンを設定することが出来る。
AddDescriptionディレクティブにて、Descriptionのカラムに表示されるテキストを設定することが出来る。 拡張子だけではなく、直接ファイル名を指定したりワイルドカードを使用することも出来る(例えばReadMe.*など)
AddDescription "Parent directiory" .. AddDescription "Image" .png .gif .jpg .bmp .psd AddDescription "Audio" .mp3 .wav .wma AddDescription "Video" .wmv .avi .mpg AddDescription "Compressed" .Z .z .tgz .gz .zip .lzh .rar AddDescription "?" *
ちなみに、DefaultDescriptionのようなディレクティブが存在しないようなので、この例では「AddDescription "?" *」でいずれの条件にも該当しない場合に表示されるテキストを設定している。
また、アイコン部分にもファイルへのリンクを設定したい場合は、IndexOptionsディレクティブにてIconsAreLinksオプションを指定する。
IndexOptions FancyIndexing IconsAreLinks ...
IndexOrderDefaultディレクティブを指定すると、デフォルトの並び順を指定することが出来る。
IndexOrderDefault Descending Size
指定方法は「IndexOrderDefault [昇順/降順] [並べ替え順]」。 Ascending(昇順)またはDescending(降順)を指定する。 並べ替え順には、Name(ファイル名)、Date(更新日)、Size(サイズ)、Description(説明)のいずれかを指定する。 上記の例だと、ファイルのサイズが大きい順位並べ替えられて表示される。
また、ファイル名にバージョンが付与されている場合について、バージョン順で並べ替えを行わせるには、IndexOptionsディレクティブにてVersionSortオプションを指定する。
IndexOptions ... VersionSort ...
ファイル・ディレクトリをまとめて並べ替えるのではなく、どのような順序で並べ替えてもディレクトリは一番始めに表示されるようにするためには、IndexOptionsディレクティブにてFoldersFirstオプションを設定する。
IndexOptions ... FoldersFirst ...
IndexOptionsディレクティブにHTMLTableオプションを追加することで、ファイル一覧をtableとして出力させることが出来る。
IndexOptions ... HTMLTable
特に設定をしなければデフォルトのヘッダとフッタが表示されるが、ここにオリジナルのものを読み込ませるにはHeaderNameおよびReadmeNameディレクティブを使用する。 HeaderNameで指定したファイルがファイル一覧の上、ReadmeNameで指定したファイルがファイル一覧の下にそれぞれ読み込まれて表示される。 そのため、それぞれヘッダ、フッタとして使用するファイルを指定することが出来る。
HeaderName /header.html ReadmeName /footer.html
デフォルトで表示される分割線を表示させたくない場合は、IndexOptionsディレクティブにSuppressRulesオプションを追加する。 また、<html>や<body>などのタグを自分で設定したい場合は、IndexOptionsディレクティブにSuppressHTMLPreambleオプションを追加することで、<html>や<body>を出力させないようにすることが出来る。
IndexOptions ... SuppressHTMLPreamble SuppressRules
ファイル名に日本語文字が含まれていて文字が化けてしまう場合などは、SuppressHTMLPreambleオプションを追加し、HeaderNameで読み込まれるように設定したファイルにてHTML文書の文字コードをシステムの文字コードにあわせるようにすればよい。
以下は、上記header.htmlとfooter.htmlの一例。
header.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<base target="_self" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title><!--#echo var="REQUEST_URI" --></title>
</head>
<html>
</body>
<div style="padding: 1em;">
<h1><!--#echo var="REQUEST_URI" --></h1>
footer.html
</div> </body> </html>
SuppressHTMLPreambleを指定すると現在のディレクトリ名が表示されなくなってしまうので、SSIを使用して表示させている(<!--#echo var="REQUEST_URI" -->の部分)。 当然、SSIを有効にしていなければ表示されない。
mod_layoutに関するメモ。 mod_layoutを使うと、SSIのようにサーバサイドで任意のコンテンツを挿入したり置き換えたり出来る。
あらかじめコンパイル時に必要となるhttpd-devel(Fedoraの場合)をインストールしておく。
yum install httpd-devel
mod_layoutをダウンロード・コンパイルする。
wget http://download.tangent.org/mod_layout-5.1.tar.gz tar xvzf mod_layout-5.1.tar.gz cd mod_layout-5.1 make
コンパイル出来たらインストールする(標準で/usr/lib/httpd/modules/にインストールされる)。
make install
httpd.confを開き、下記のエントリが追加されていることを確認しておく。
LoadModule layout_module /usr/lib/httpd/modules/mod_layout.so
拡張子htmlのファイルに対して、bodyタグの直後にヘッダ、直前にフッタを挿入する。
AddOutputFilter LAYOUT html LayoutHeader /var/www/common/layout/header.html LayoutFooter /var/www/common/layout/footer.html
AddOutputFilterで挿入する対象のファイルを指定し、LayoutHeaderとLayoutFooterで挿入するコンテンツを指定する。