さくらのレンタルサーバのコンテンツネゴシエーションの癖

経緯

ふと、さくらのレンタルサーバ上のWebページで拡張子なしでもコンテンツにアクセスできることに気付きました。例えば、

https://example.com/about.html

というページが存在していたとして、

https://example.com/about

でも同じコンテンツにアクセスできるのです。

また、その後には奇妙なURLでもアクセスできることに気付きました。

調査

検索してみると、これは Apache の mod_negotiationモジュール で提供される MultiViews という機能に因るもののようです。

さらに追加調査したところ、

https://example.sakura.ne.jp/apache/wigwam/index/hoge.fuga/piyo.hogera というURLで、https://example.sakura.ne.jp/apache/wigwam/index.html のコンテンツにアクセスできた
https://example.sakura.ne.jp/apache/wigwam/index/hoge.fuga/piyo.hogera というURLで、https://example.sakura.ne.jp/apache/wigwam/index.html のコンテンツにアクセスできた
https://example.sakura.ne.jp/apache/wigwam/index/hoge.fuga/piyo.hogera

https://example.sakura.ne.jp/apache/wigwam/がルートディレクトリとして、このように明らかにサブディレクトリに到達(/hoge.fuga/piyo.hogera)していても、https://example.sakura.ne.jp/apache/wigwam/index.htmlのコンテンツが表示されることを確認しました。

これには驚きました。HTMLの内容は表示されたとしても、仮に css や js 、画像ファイルといった各種リソースが相対パスで記述されている場合はパスのパースで異なるパスとみなされ、 404 Not Found. になってしまうでしょう。

対処

対処法としては、上述の MultiViews 機能をオフにすれば良いということになります。これは幸いにも、 .htaccess で制御可能です。

Options -Multiviews

この1行を記述した .htaccess を設置することで

https://example.sakura.ne.jp/apache/wichiup/index/hoge.fuga/piyo.hogera というURLで 404 Not Found. になった
https://example.sakura.ne.jp/apache/wichiup/index/hoge.fuga/piyo.hogera というURLで 404 Not Found. になった
https://example.sakura.ne.jp/apache/wichiup/index/hoge.fuga/piyo.hogera

先程と同様のパス(ディレクトリを wigwam/ から wichiup/ に変更した)で、 404 Not Found. となることを確認しました。

まさかこんな癖があるとは……。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。