経緯
ふと、さくらのレンタルサーバ上の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
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
先程と同様のパス(ディレクトリを wigwam/
から wichiup/
に変更した)で、 404 Not Found. となることを確認しました。
まさかこんな癖があるとは……。