WordPressで運営しているサイトのアクセス解析を見てるとindex.htmlへのアクセスというのがあったりします。Wordpressではindex.phpはあっても、index.htmlはありませんから、404になってしまうわけです。
それではお互いハッピーじゃないということで、index.htmlをTOPに飛ばすリダイレクトを設定してあげればよいのですが、意外と難しかったのでメモしておきます。
WordPressが設定する.htaccessの内容
WordPressをインストールすると、たぶんこんな感じの.htaccessになってると思います。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
上記の設定では、index.phpにアクセスすると、TOPに飛ばすようになっています。
.htaccessに何を書けばよいか?
やりたいことは、index.htmlにアクセスがあったら、TOPに飛ばしたいわけです。
以下のように書けばいいはずです。
RewriteRule ^index\.html?$ / [R=301,L]
WordPressが設定した.htaccessの中に追記すればよいです。
この設定では、index.htmlとindex.htmのどちらもTOPにリダイレクトしてくれますからもしもの時も安心です。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
上手く動かなかった事例
ネットでindex.htmlをTOPにリダイレクトする方法を探すとそれなりに数が出てくるのですが、Wordpressが設定している.htaccessを意識した内容はあまりありません。
結果、そのまま書いても上手く動きませんでした。
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L]
index.htmlにアクセスがある理由
Google Analyticsを見ていてindex.htmlにアクセスがあることが分かったのですが、少し様子が変でした。
というのも、参照元にそのページへの参照が無いにもかかわらず、それなりのアクセスがあるのです。
同じくしてリファラースパムでgetadsincomely.infoとbestofferhddeed.infoからのアクセスが10回づつありました。おそらくこのスパムbotがTOPページにindex.htmlがあるかないか関係なく、index.htmlをつけてアクセスしていたのだと思います。
なので、index.htmlをTOPにリダイレクトしても誰もうれしくないという。
まとめ
簡単そうだけど、自分で考えるのは面倒なのでネットで検索してコピペしたいと思うわけですが、意外と上手く行かないケースは多くて、結果的に自分で調べたり試行錯誤したりと、それなりに時間はかかるわけです。今回のケースはとても簡単な解決方法でWordpressを使っている人ならだれでもうまくいくと思います。