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 ネゴシエーションで使用できるかを決定します。

コメント