WordPress へのアクセスを最適化する .htaccess のリダイレクト設定


ありがたいことに最近結構なアクセスをいただいています。その分サーバへの負荷も結構なことになっているので、負荷の軽減に取り組んでいるのですが、Google ウェブマスターツール を見ていると、かなりの数の「見つかりませんでした(つまり 404 not found)」が出ていることに気づきました。

404 not found に対しても WordPress が逐一起動してしまうこと、本来なら拾えているアクセスを無駄にしないためにも、これを改善してみることにしました。

Movable Type のときに使用していたアドレスを WordPress にリダイレクト

wokamoto 兄さんに教えてもらった .htaccess を設定したときに、Movable Type 時代に使っていたアドレスから WordPress へとリダイレクトする設定をごっそり消してしまっていました。

以前は

[bash]Redirect Permanent /mt/archives/000199.php http://8bitodyssey.com/archives/199
Redirect Permanent /mt/archives/000198.php http://8bitodyssey.com/archives/198
Redirect Permanent /mt/archives/000197.php http://8bitodyssey.com/archives/197[/bash]

みたいなコードを延々100行くらい書いていました。おかげで .htaccess のサイズも肥大化していたので、今回はこれをシェイプアップ。

[bash]RedirectMatch permanent /mt/archives/000(.*)\.php$ /archives/$1
RedirectMatch permanent /mt/ /[/bash]

正規表現はむしろ苦手なほうですが、うまく行っているようです。これで、MT 時代の記事にリンクしていただいたアクセスも、WP へ。”permanet” にしているので、クローラーに対しても移転をお知らせできます。

ちなみに、.htaccess での設定は、上から順に実行/解釈されるそうなので、上記コードは、

[bash]# BEGIN WordPress[/bash]

の一連のコードの前(上)に記載しました。

404 になってしまう /index.html へのアクセスをトップにリダイレクト

さきほども出てきた wokamoto 兄さんの設定

[bash]RewriteCond %{REQUEST_FILENAME} !\.(html?|xml|xsl|js|css|jpe?g|png|gif|ico)$[/bash]

により、実在しないファイルへのアクセスは Apache レベルで 404 を返すようになっています。WordPress では index.php は用意されていますが、index.html は使用しないため、サーバ上もこのファイルはありません。

つまり、/index.html にアクセスすると…

Not Found

こうなっちゃうわけですな。みじめっ(つд・)

Apache にエラードキュメントを設定しよう!と決意を固めつつ、取り急ぎこれをトップにリダイレクトしたい。なぜなら、Nao さんとか wokamoto 兄さんのページのどこかから、index.html へのリンクがはられてしまっているから(笑)

うんうん唸りながら、結局 hiromasa センセに相談して、下記のようにしました。

[bash]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [R=301,L]
RewriteRule ^default\.html?$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !\.(html?|xml|xsl|js|css|jpe?g|png|gif|ico)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
[/bash]

よかよか。

ちなみに、以下のようにすると、http://8bitodyssey.com/index.htmlだけでなく、http://8bitodyssey.com/naokomc/index.html のような存在しないindex.htmlへのアクセスをトップにリダイレクトしてくれます。

[bash]RewriteRule index.html http://8bitodyssey.com/ [R=301,L][/bash]

まぁどっちがよいかはあなた次第。ないものはないって表示したほうがよい気がしますけど、いちいち WordPress 起動するのもねぇ。

さて、これで負荷がどうなりますか。


“WordPress へのアクセスを最適化する .htaccess のリダイレクト設定” への12件のフィードバック

  1. 僕は、こうしてるよ

    RewriteRule ^index\.html?$ / [R=301,L]
    RewriteRule ^default\.html?$ / [R=301,L]

    こうしておくと、index.htm や default.html, default.htm へのアクセスもトップページに飛ばしてくれるのです。

  2. あら!名指しされちゃってますね :P どこか分かれば、修正しますよ〜。

    ちなみに私はこの間こっそり? pretty permalink に移行したので、その時に古いリンク切れとかは修正したつもりだったんですが、コメント欄とかかな。

  3. お世話様です。
    ちょうどWordPressのindex.htmlへのアクセスについての.htaccessについて探していたもので、とても参考になりました。ありがとうございます!

  4. MTからWordPressに移行するときに、いちばんやっかいなのが、UrLだと思っていて
    躊躇しているところがあります。参考になりました。
    URLを転送するプラグインもあるようですので、それもためしてみようかと思います

  5. WordPressを今年こそ覚えたいと思い、いま色々と設定しています。 index.html を index.php にリダイレクトする方法を探していて、非常に助かりました。
    ありがとうございます。

フォームは コメントしてほしそうに こちらを見ている……!

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください