Optionsを利用せずにMultiViewsを無効にする

スポンサーリンク


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

上に戻る

コメント

タイトルとURLをコピーしました