pc.casey.jp » geeklog から WordPress へ記事移動2(インポート編) の続き。データはインポートされた。しかし、以前のサイトからの誘導と画像データのリンクが以前のサイトに貼られたままになっている。ここでは以前のサイトからの誘導を行う.htaccessを作成する。基本的な内容は pc.casey.jp » geeklogからWordPressへの引越し(.htaccessによる動的ページの高度な条件分岐!?) 等を参考にして欲しい。
スポンサードリンク
どこからどこにリンクするか
まず、WordPressには様々なパーマリンクが存在する。geeklogでの記事番号はWordPressには引き継がれなかった。だから記事番号は利用できない。
上記のような形式であれば既存のgeeklogデータから何とかできそうだ。geeklogデータから投稿日の一覧と、記事タイトルを取得できればなんとかできるだろう。
記事一覧のコピーでデータを作成できるか
データ抽出のSQL
ということでSQLをphpMyAdminなどから発行してデータを取り出すことにする。
SELECT sid, date_format(date,'/wp/testgeeklog/%Y/%m/%d/'), title FROM `gl_stories` WHERE 1
こんな感じ。で、最終的に創りたい.htaccess用のデータは以下のとおり:
RewriteCond %{QUERY_STRING} 20091127034150115 RewriteRule article.php https://pc.casey.jp/?p=249 [R=301,L]
ということなのでどの時点で固定文を入れるか迷うところだけれど、取り敢えずこの段階で埋め込んでしまおう。SQLでURLエンコードできなくもないけれど、面倒っぽいのでこの先で何か考えることにする。
SELECT 'RewriteCond %{QUERY_STRING}', sid, 'RewriteRule article.php', date_format(date,'http://www.casey.jp/wp/testgeeklog/%Y/%m/%d/'), title, '[R=301,L]' FROM `gl_stories` WHERE 1
URLエンコードが意外に面倒
まず 日本語URLをExcelで手軽にURLエンコードする方法 にある方法でサラっと変換できるかと思ったら、WordPressのURLとは違うようなので手を加える必要がありそう。何となくで大嫌いなVBAを使ってみる。
どのへんが違うかの例:
(記事タイトル)What’s CASEY.JP
(VBAエンコード)what’s%20casey.jp
(WordPress)whats-casey-jp
(記事タイトル)暴魔大戦1,001,304スコヴィル
(VBAエンコード)/%E6%9A%B4%E9%AD%94%E5%A4%A7%E6%88%A61%2C001%2C304%E3%82%B9%E3%82%B3%E3%83%B4%E3%82%A3%E3%83%AB
(WordPress)/%e6%9a%b4%e9%ad%94%e5%a4%a7%e6%88%a61001304%e3%82%b9%e3%82%b3%e3%83%b4%e3%82%a3%e3%83%ab/
まず、上記から読み取れるのは全てが小文字になって、「’」や「.」「,」が消されて、スペースがハイフンに置き換わっているということ。
(記事タイトル)/plugins/gus/functions.inc line 1253
(WordPress)/pluginsgusfunctions-inc-line-1253/
(記事タイトル)var/www/***/plugins/filemgmt/filemgmt.php
(WordPress)varwwwpluginsfilemgmtfilemgmt-php/
(記事タイトル)CGI::Application::Dispatch がインストールできない
(VBAエンコード)cgiapplicationdispatch-%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84
(WordPress)cgiapplicationdispatch-%e3%81%8c%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84/
URLだからスラッシュや「*」「:」も加工されるけど、エンコードではなく削除されている。
(記事タイトル)Error: I need 262144 KiB, but dom0_min_mem is 262144 and shrinking to 262144 KiB would leave only 244672 KiB free.
(VBAエンコード)error-i-need-262144-kib-but-dom0_min_mem-is-262144-and-shrinking-to-262144-kib-would-leave-only-244672-kib-free-
(WordPress)error-i-need-262144-kib-but-dom0_min_mem-is-262144-and-shrinking-to-262144-kib-would-leave-only-244672-kib-free/
最後のハイフンは消される。
(WordPress)http://www.casey.jp/wp/testgeeklog/2009/06/16/alcohol-52/
%も消される。
(記事タイトル)ディスクイメージ作成・パーティション編集 ソフトウェア ? Backup & Recovery
(WordPress)/%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8%e4%bd%9c%e6%88%90%e3%83%bb%e3%83%91%e3%83%bc%e3%83%86%e3%82%a3%e3%82%b7%e3%83%a7%e3%83%b3%e7%b7%a8%e9%9b%86-%e3%82%bd%e3%83%95/
日本語はエンコードされるが、長いもの(200バイトまで?)はカットされている・・・面倒なのでこれは放置でいいや。(.htaccessでの転送確認段階で個別修正しよう)
businessday.pl – ○日後の営業日を求める
businessday-pl—%E2%97%8B%E6%97%A5%E5%BE%8C%E3%81%AE%E5%96%B6%E6%A5%AD%E6%97%A5%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B
businessday-pl-%E2%97%8B%E6%97%A5%E5%BE%8C%E3%81%AE%E5%96%B6%E6%A5%AD%E6%97%A5%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B
ハイフンが連続するときは圧縮される。
※VBAエンコードは参考にしたURLに記載されているものと、改造版が混在している。
VBAでエンコードする(例)
' geeklog for wordpress, GPL, by CASEY.JP Function urlEncode(str As String) As String Set re = CreateObject("VBScript.RegExp") ' str to lower str = StrConv(str, vbLowerCase) ' delete ------------------------------- re.Pattern = "[\*',/:#%]" re.Global = ture str = re.Replace(str, "") ' replace ------------------------------ str = Replace(str, " ", "-") str = Replace(str, ".", "-") ' -- to - ------------------------------ 'For i = 0 To 5 ' str = Replace(str, "--", "-") 'Next i re.Pattern = "--+" re.Global = ture str = re.Replace(str, "-") ' delete last char ---------------------- re.Pattern = "-$" re.Global = False str = re.Replace(str, "") ' delete start char --------------------- re.Pattern = "^-" re.Global = False str = re.Replace(str, "") ' byte check ' for work! ' copy Set sc = CreateObject("ScriptControl") sc.Language = "Jscript" Set js = sc.CodeObject urlEncode = js.encodeURIComponent(str) End Function
コメント