PR

geeklogからWordPressへの引越し(.htaccessによる動的ページの高度な条件分岐!?)

これは、かなりハマった。

概要

やりたいことはgeeklogからWordPressへの引越し。(WordPressはもう稼動していて、geeklogは更新が止まっている)ただ、思うようなエクスポート・インポートツールが無かった。

「この記事は引っ越しました」と記事内に1つ1つ書いてもよいけれど、それだと500を超える記事がリストから消えないことになり、後どれくらい残っているのかわからない。

スポンサードリンク

今回は複雑な作業を行う必要があるのだ。

今あるサイトがcasey.jp。ここにgeeklogと他のものがある。単独で移動できるものは移動済み。ただ、casey.jpからデータを抜いて空にして、www.casey.jp へ転送し別の内容を書きたい。また、casey.jpのgeeklogをgl.casey.jpに転送しようかとも思ったのだけど、geeklogはファイル量が膨大な上、URLやパスが変わると結構面倒な作業が必要だ。

casey.jpを空にするには手っ取り早いのだけどね。結局転送やら記事のコピーなんかをする労力を考えると、今回の方法がいいかなーと思ったわけで。

それから、SEO的にも良くない、というかもったいない。以外にアクセス数のあるページもあるのでWordPressに引っ越しても気にすることなく見て欲しい。んで、301リダイレクトをクローラに教えて、行き渡ったところでcasey.jpを消すか、www.casey.jp に転送して、.htaccessを参照させるようにしようかなと思う。これくらいの転送なら、厳しいほうのYahooさんも納得してくれるかな・・・とか思いつつ。

まぁ、雑に全アクセスを新しいWordPressのトップページへ転送してもいいけど、見てくれる人に面倒をかけてしまう。というか、私がそういったものに遭遇すると気分の良いものではないので。

さて、私情はこの辺にして取り掛かることにする。

手順としては結局手動になるのだけれど、次の手順を踏むことにした。

  1. geeklogの任意の記事を開き、内容をコピーする
  2. コピーした内容をWordPressに貼り付けて、保存する
  3. geeklogに戻り、該当する記事を「削除」する
    (今までは「記事は移動しました」と書いてリンクを貼るだけだった)
  4. geeklogへアクセスされたときに、WordPressのURLへ転送するように.htaccessに記載する

そして、もっともハマったのが.htaccessの記述。

まず、やりたいことは次の通り:

http://casey.jp/article.php?story=20091127034150115 (geeklog)に来たら、https://pc.casey.jp/?p=214 に301リダイレクトする。

で、テスト。静的ファイル:

http://casey.jp/test.html に来たら、http://www.yahoo.co.jp/ に行く。


Redirect permanent /test.html http://www.yahoo.co.jp/


これは難なくOK。で、ここからハマる。普通に考えると、


Redirect permanent /article.php?story=20091127034150115 http://www.yahoo.co.jp/


まぁ、うまくいかない。試行錯誤:


RewriteEngine on
RewriteRule test.html http://www.yahoo.co.jp/ [L]
RewriteRule article.php\?story\=20091127034150115 http://www.yahoo.co.jp/ [L]
RedirectMatch (article.php\?story\=20091127034150115)$ http://www.yahoo.co.jp/
RedirectMatch ^article.php(\?story=20091127034150115)$ http://www.yahoo.co.jp/
RewriteRule ^(.*20091127034150115)$ http://www.new-example.com/$1 [R=301,L]




RewriteEngine On
RewriteCond %{REQUEST_URI} 20091127034150115 [L]
RewriteRule ^(.*) http://www.yahoo.co.jp/


転送先に?とか付くのはOKらしいけど、転送元に?があったりするのはNGらしい。うーん。
そして、やっと神サイトを発見!光臨!


RewriteEngine on
RewriteCond %{QUERY_STRING} 20091127034150115$
RewriteRule article.php http://www.yahoo.co.jp/ [NE,QSA,R=301,L]


で、できたー・・・。完全に合っているかはわからないけど、とりあえずここまでくれば何とかなりそう。

ちなみに、複数書く場合は以下のようにするらしい。引用:

リクエストの中の “User-Agent:” ヘッダにしたがって ホームページサイトの書き換えを行なうには、以下のようにします:

RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
RewriteRule  ^/$                 /homepage.max.html  [L]

RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  ^/$                 /homepage.min.html  [L]

RewriteRule  ^/$                 /homepage.std.html  [L]


解釈:ブラウザとして(自分自身で ‘Mozilla’ と名乗っている)ネット スケープナビゲータを使う場合、フレームなどを含む max の ホームページを見ることになります。(端末ベースの)Lynxブラウザを 使う場合は、画像やテーブルなどを含まない min のホーム ページが表示されます。それ以外のブラウザの場合は標準(std)のページ が表示されます。

結論

次のように変更すればよいと思われ:


RewriteEngine on

#------------------------------------------------------------------------------
# geeklog downloads to wordpress
#------------------------------------------------------------------------------
# from: http://casey.jp/filemgmt/visit.php?lid=7
# to  : https://pc.casey.jp/wp-content/plugins/download-monitor/download.php?id=1

RewriteCond %{REQUEST_URI}%{QUERY_STRING} /filemgmt/visit.php?lid=[1-8]
RewriteRule / https://pc.casey.jp/?page_id=428 [R=301,L]

#------------------------------------------------------------------------------
# geeklog static pages to wordpress
#------------------------------------------------------------------------------
# from: http://casey.jp/staticpages/index.php?page=20080221024111720
# to  : http://diary.casey.jp/?page_id=50

RewriteCond %{QUERY_STRING} 20080221024111720
RewriteRule index.php http://diary.casey.jp/?page_id=50 [R=301,L]

#------------------------------------------------------------------------------
# geeklog to wordpress
#------------------------------------------------------------------------------
# from: http://casey.jp/article.php?story=20091127034150115
# to  : https://pc.casey.jp/?p=24

RewriteCond %{QUERY_STRING} 20091127034150115
RewriteRule article.php https://pc.casey.jp/?p=249 [R=301,L]

RewriteCond %{QUERY_STRING} 20081204183752432
RewriteRule article.php http://diary.casey.jp/?p=23 [R=301,L]

#------------------------------------------------------------------------------
# geeklog to geeklog
#------------------------------------------------------------------------------
# from: http://casey.jp/article.php?story=20090910213045272
# to  : http://casey.jp/article.php?story=20090831235242762

RewriteCond %{QUERY_STRING} 20090910213045272 [OR]
RewriteCond %{QUERY_STRING} 20090831235504272 [OR]
RewriteCond %{QUERY_STRING} 20090830152902481
RewriteRule article.php http://casey.jp/article.php?story=20090831235242762 [R=301,L]

RewriteCond %{QUERY_STRING} 2008012412564096
RewriteRule article.php http://casey.jp/article.php?story=20091104164245511 [R=301,L]


注意

  • 最後に改行を付ける
  • permanentは、永久的に移動したことを示すステータスを返します=301、つけないときは一時的な移動=302
  • テスト用の転送先は自分で用意するんですよ。迷惑かけないようにね・・・。

参考文献

コメント