mod_rewrite


しばらく間が空いてしまった。WordPress自体があまり手がかからないようで、ひととおり設定してしまえば特に問題もなく、書くこともない。

今回の件は WordPressカテゴリに含めるのも何だという気もするが、その関連ということで。

WordPress導入時、.htaccessに自動的に

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

と書き込まれる。実在するファイル名・ディレクトリ名でない場合、/index.php が呼ばれるようになる。

さて、WordPress導入以前に同じサイトで某日記システムを使っていたのだが、そのURLは

http://www.example.com/?date=20050325

のようになるものであった。現在このURLで指示されるものはないのだが、上記により、404エラーにはならず、トップページが表示される。

検索エンジンに旧い形式のURLが残っていて、しかもいまWordPressで作られたトップページがその旧い形式のURLの内容として着々と更新され続ける。WordPressで書いた最新の記事の内容が、http://www.example.com/?date=20050325 のものとして検索されてしまうのだ。

放っておいてもその連鎖は断ち切れないので、[[http://www.math.tohoku.ac.jp/~kuroki/keijiban/Robots.html|ロボット対策]]を参考に、.htaccessに次のように書き加えてみた(( (A or B or C) and D はmod_rewriteの文法でどう書くのだろう。はっきりしないので冗長に書いた。))。


RewriteCond %{HTTP_USER_AGENT} archiver [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} crawler [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} robot [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} slurp [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} spider [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} msnbot [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]
RewriteCond %{HTTP_USER_AGENT} findlinks [NC]
RewriteCond %{QUERY_STRING} .*date=200.*
RewriteRule ^.*$ - [G,L]


旧URLへのアクセスは、(1)せっかく検索して見つけて来てくれる人には今のトップページをみていただく (2)検索ロボットなら410エラーを返す、とした。こうしておけばそのうち検索エンジンから消えるだろうし、昔の記事に直接リンクしている人はほぼいないだろうから、旧URLへのアクセスは絶滅するだろうと考えた。

—-

という対策をとったのが実は1ヶ月前。だいたい思ったとおりに絶滅に向かっていったのだが、Yahoo の Slurpというのは行儀が悪いのか((ログを見るとアクセス頻度もやたらと多い))、なかなか根絶できない。

そして今日、検索で旧URLをたどってくる人がなぜか増えている。確認すると、.htaccessの当該部分がすっかり消えている。ファイルの時刻を見ると、絶対に自分で何かをした時刻ではない。WordPressがこれを書き換えることはないと思うし、そうするとこれを置いている[[http://www.sakura.ne.jp/|レンタルサーバ]]の問題なのだろうか。なんだか気持ちが悪い。

関連する投稿

カテゴリー: WordPress   タグ:   この投稿のパーマリンク

mod_rewrite への2件のコメント

  1. aka より:

    こんにちは
    Permalink Redirect というプラグインではどうでしょう。
    /index.php? へアクセスした人を指定してあるパーマリンクへリダイレクトしてくれるプラグインです。
    http://fucoder.com/code/permalink-redirect/

  2. 弓張月 より:

    ありがとうございます。
    ちょっと書き足りなかったのですが、乗り換えに際して過去の記事を引き継いだのではなく、内容的にはまったく別のものとして出発しましたので、個々の記事のリダイレクトは必要ないのです。
    人間が旧URLをたどってきてトップページを見ることになるのは、そのままでかまわないのですが、問題は検索エンジンに旧タイプURLが残っていて、それがWordPressによるmod_werite設定によっていつまでも有効なまま生き続けていることでした。
    Permalink Redirectは301を返すようですね。Yahooのヘルプを見ても、今回のケース(?パラメータ付をトップページへ)はどう扱われるのか判然としません。

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>