ApacheにてMultiViewsというものがある。
この機能を有効・無効にするに、.htaccessファイルを使うことができる。
有効にする
Options +MultiViews
無効にする
Options -MultiViews
さくらのレンタルサーバーなど、.htaccessでのOptionsの利用が制限されている場合は
mod_rewriteを用いて希望のページへリダイレクトするように設定するといいだろう。
・アクセスしてきたURLがファイルである
・且つURIの末尾に指定する拡張子がついて居ない
ちなみに以下で指定している条件は、Apache1.3のmime.typesから確認した拡張子、それに加えて「cgi / pl / php / phps」の4つを加えています。もし、ご自身のWebサーバー上で公開されているファイルのうちどの拡張子が使われているか全てを把握することが出来るならば、必要な数の拡張子だけ設定した方が見やすくなると思います。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase # URLで指定されているものがファイルであり RewriteCond %{REQUEST_FILENAME} -f # そのファイル名の末尾に()に囲まれたものが無い場合 RewriteCond %{REQUEST_URI} !.*.(ai|aif|asc|au|avi|bcpio|bin|bmp|cgi|cpio|cpt|csh|css|dcr|djvu|doc|dvi|etx|ez|gif|gtar|hdf|hqx|html|ice|ief|igs|jpeg|js|latex|m3u|man|me|mid|mif|movie|mpeg|mpga|ms|msh|mxu|nc|oda|pbm|pdb|pdf|pgm|pgn|php|phps|pl|png|pnm|ppm|ppt|qt|ra|ram|ras|rgb|rpm|rtf|rtx|sgml|sh|shar|sit|skp|smi|spl|src|sv4cpio|sv4crc|swf|t|tar|tcl|tex|texinfo|tiff|tsv|ustar|vcd|wav|wbmp|wbxml|wml|wmlc|wmls|wmlsc|wrl|xbm|xhtml|xls|xml|xpm|xwd|xyz|zip)$ # notfound.htmlを見せる RewriteRule ^.*$ /notfound.html [L] </IfModule>
サーバー上で公開しているファイルの拡張子が「html / gif 」のみの場合は以下のようにするのがBestでしょう。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase # URLで指定されているものがファイルであり RewriteCond %{REQUEST_FILENAME} -f # そのファイル名の末尾に()に囲まれたものが無い場合 RewriteCond %{REQUEST_URI} !.*.(html|gif)$ # notfound.htmlを見せる RewriteRule ^.*$ /notfound.html [L] </IfModule>
http://httpd.apache.org/docs/2.2/ja/content-negotiation.html
MultiViews
の効果は以下のようになります: サーバが/some/dir/foo
へのリクエストを受け取り、/some/dir
でMultiViews
が有効であって、/some/dir/foo
が存在しない場合、 サーバはディレクトリを読んでfoo.*
にあてはまる全てのファイルを探し、 事実上それらのファイルをマップするタイプマップを作ります。 そのとき、メディアタイプとコンテントエンコーディングは、そのファイル名を 直接指定したときと同じものが割り当てられます。 それからクライアントの要求に一番合うものを選びます。サーバがディレクトリの索引を作ろうとしている場合、
MultiViews
はDirectoryIndex
ディレクティブで指定されたファイルを探す過程にも 適用されます。設定ファイルにDirectoryIndex index
が書かれていて、
index.html
とindex.html3
が 両方存在していると、サーバはその中からどちらかを適当に選びます。 もしその両方が存在せずにindex.cgi
が存在していると、 サーバはそれを実行します。もしディレクトリを読んでいる際に、 文字セット、コンテントタイプ、言語、エンコーディングを 指定するための
mod_mime
で認識できる拡張子を持たないファイルが見つかると、結果はMultiViewsMatch
ディレクティブの設定に依存します。このディレクティブは ハンドラ、フィルタ、他のファイル拡張子タイプのどれが MultiViews ネゴシエーションで使用できるかを決定します。
コメント