「BlognPlus」タグアーカイブ

ブログのURLを変更した場合のリダイレクト処理

ブログのアプリをblognplusからWordPressに変更した際にURLもhttps://hiro7216.mydns.jp/blognplusからhttps://hiro7216.mydns.jp/blogへと変更しました。
当然ながらGoogleやYahooなどの検索エンジンでは以前のURLが表示されますし、ブックマークなどでURL指定でお越しになられる方も以前のURLでのアクセスになります。
URLの変更はこちらの都合なので、以前のURLでアクセスしても可能な限り目的のページを表示できるようにしました。

今回はblognplus/index.php?e=xxxxをblog/?p=xxxxにするケースと
blognplus/xxxxをblog/xxxxにするケースの2種類だけの対応となります。

使用するのはApacheのRewriteEngineです。
サーバーが対応していない場合は使えませんので、その点だけは注意が必要です。
またApacheではなくnginxでもこの方法は使用できません。
nginxの場合は書き方を少し変えてnginx.confに記載する必要があります。

最初に結論から書きます。
設置してるwebのトップに.htaccessを置いて以下の内容を記述します。
(blognplusの部分は以前のURL、blogの部分は新しいURLとなります)

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{QUERY_STRING} e=(.+)
    RewriteRule ^blognplus/(.*)$ /blog/?p=%1 [R=301,L]
    RewriteRule ^blognplus/(.*)$ /blog/$1 [R=301,L]
</IfModule>

RewriteEngineを細かく説明すると色々と難しいので簡単な説明にします。

まず1行目の<IfModule mod_rewrite.c>ですが、これはRewriteEngineモジュールが使用できる場合という意味です。
RewriteEngineモジュールが使用不可の場合は今回の設定は全て無視されます。
2行目はRewriteEngineを使用する、です。

3行目と4行目は関連しています。
3行目はクエリ文字列(URLの?の後ろに付く文字列です)がe=xxxxになってた場合に変数に保存します。
(xxxxの部分は任意の文字列です)
4行目はURLがblognplus/~~~~だった場合に/blog/?p=%1にリダイレクトします。
%1の部分は3行目で保存していたxxxxの部分に置き換えられます。

5行目はblognplus/xxxxにアクセスがあった場合に/blog/xxxxにリダイレクトします。
($1がxxxxに置き換えられるだけです)

[R=301,L]の部分のR=301はリダイレクトなので、消して[L]だけにするとリダイレクトせずに昔のURLのまま、新しいURLの内容が表示されます。
Lの部分は条件に一致したらその次のルールは使わずに終了という意味です。

RewriteEngineを上手に使うとドメインを転送することもできますし、もっと細かくURLを変換することも可能です。
Webを扱う人は覚えておくと色々便利に使えます。

ブログをBlognplusからWordPressへ変更しました

既に配布もメンテも終了しているBlognplusを長い間使わせて頂きましたが、流石に限界かと思いWordPressへと乗り換えました。

データの移行も結構大変でした。
記事内に自身のブログのリンクが張られていたりするので、その整合性を取るのにインポート前のファイルを編集したりしました。
WordPressへのインポート自体は、Blognplusのエクスポート機能でMovableType形式で吐き出せば簡単なのですが、Blognplus側で削除した記事の分だけ、WordPress側では詰めて投稿が作成されるのでズレていくのです…
エクスポートファイルを修正したり、DBを直接いじって値を変更したり、なんとかほとんどの記事を同じIDで作成できました。

他にも画像のリンクなども修正が必要でした。
(これは置換で一発でしたが)

URLもblognplusからblogに変更し、URLパラメーターもblognplus形式のindex.php?e=123からWordPress形式の?p=123へ変更になりました。
そこでApacheのRewriteEngineを使い、以前のblognplusのURL形式で開いても、新しいWordPressのURLで同じ記事が開くようにリダイレクトしています。
尚、カテゴリーに関しては、サブカテゴリーを見直して一部変更したため、以前のURLとの整合性がそもそも取れないので、RewriteEngineでの処理は行っていません。

あとは同一IPではカウントアップしないカウンターのウィジェットを自作したりしました。
(コアなロジックはblognplusのカルカンカウンターを流用させて頂きました)

そして固定ページには、カテゴリー毎に記事の見出しを自動で生成する機能も作成しました。

色々やってやっと形になったので、この度BlognplusからWordPressへ切り替えました。
色々やったおかげでWordPressの作りの勉強にもなりました。
近年仕事でやってるWeb系はAngularなどのJS系フロントエンドやJSFなどが殆どだったので、PHPを久々にちゃんと触りました。

blognplusの画像登録時にリサイズを行う

この記事はblognplusバージョン2.6.2ベースで書いています。
また、サーバーにimagemagickがインストールされている必要があります。
imagemagickがインストールされているのにエラーが出る場合は、ImageMagicKのconvertのパス位置を確認してください。
(/usr/bin/convertの部分です)
またphp.iniのsafe_modeがONになっているとshell_execを実行することは出来ません。

blognplusの初期設定には「表示可能最大サイズ(横×縦)」という項目がありますが
これは画像自体をリサイズするわけではなく、表示上のみのリサイズとなっています。

デジカメで撮ったような画像は非常に大きく、画像編集ソフトを利用してリサイズ後に
アップロードしている方が殆どではないかと思います。
私はそれほど面倒だとは感じませんが、知人から面倒だと言われ
アップロード時に自動でリサイズする変更を加えました。
※リサイズする基準のサイズは、初期設定の「表示可能最大サイズ(横×縦)」を利用しています。

アップロードの処理をしている箇所は2箇所あり、その両方に修正を入れます。
まずは記事の編集時にポップアップで画像挿入する画面の修正です。
ファイル名はpict.phpです。

$error = blogn_mod_db_file_add($user_id, $file_name, $_POST["blogn_comment"]);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) {
$ratio = $ratio1;
}else{
$ratio = $ratio2;
}
$rwidth = round($size[0] * $ratio);
$rheight = round($size[1] * $ratio);
// resize
shell_exec('/usr/bin/convert -geometry '.$rwidth.'x'.$rheight.' '.$dest.' '.$dest);
}
}

Imagickをサポートしているサーバーであれば、以下のように書いてもOKです。

$error = blogn_mod_db_file_add($user_id, $file_name, $_POST["blogn_comment"]);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) { $ratio = $ratio1; }else{ $ratio = $ratio2; } $rwidth = round($size[0] * $ratio); $rheight = round($size[1] * $ratio); // resize $image = new Imagick($dest); $image->thumbnailImage($rwidth,$rheight);
//$image->setCompressionQuality(50);
$image->writeImages($dest, TRUE);
$image->clear();
$image->destroy();
}
}

次に管理画面の「ファイル管理」を行う画面の修正です。
ファイル名はadmin.phpになります。
基本的に入れる処理は同じものになります。
当然ながら、こちらもImagickをサポートしていればImagickのロジックでもOKです。

$error = blogn_mod_db_file_add($user_id, $file_name, $comment);
@chmod($dest,0666);
// ファイルの種類チェック
if ($size = @getimagesize($dest)) {
// 最大サイズを超える画像の場合はリサイズを行う
if ($size[0] > BLOGN_MAXWIDTH || $size[1] > BLOGN_MAXHEIGHT) {
$ratio1 = BLOGN_MAXWIDTH / $size[0];
$ratio2 = BLOGN_MAXHEIGHT / $size[1];
if ($ratio1 < $ratio2) {
$ratio = $ratio1;
}else{
$ratio = $ratio2;
}
$rwidth = round($size[0] * $ratio);
$rheight = round($size[1] * $ratio);
// resize
shell_exec('/usr/bin/convert -geometry '.$rwidth.'x'.$rheight.' '.$dest.' '.$dest);
}
}

ちなみに携帯の画面から見ると、更に各携帯端末に合わせて
自動で画面サイズを調整する機能がblognplusにはあります。
しかし、携帯端末のリストが古く、最近の機種では画像が小さく表示されてしまいます。
datディレクトリの中にあるmobilelist.cgiが機種毎の画像表示可能の定義ファイルになります。
つまりmobilelist.cgiを最新のものに更新すれば、比較的新しい機種でも対応が可能となります。
以下のURLよりダウンロード可能です。
BlognPlus 用「mobilelist.cgi」

また携帯でblognplusにアクセスすると画像は直接表示されず
「PIC」というリンクで表示されますが、いちいちリンク先へ飛ぶのも面倒なので
直接表示出来るように修正を加えました。
(携帯のキャッシュ可能なサイズを超えるようなblogですと厳しいかもしれません)
修正するファイル名はindex.phpです。

if ($fsize < 0.4) {
$result = '';
}else{
$result = '[PIC]';
}

と書かれている行を、以下のようにリンクから直接表示に変更します。

if ($fsize < 0.4) {
$result = '';
}else{
$result = '';
}

これで携帯からアクセスした場合でも、機種毎に最適なサイズで直接画像が表示されるようになります。
※mobilelist.cgiは定期的に更新してあげないと、最新の携帯では小さい表示なってしまいます。

いっそリストに乗っていない機種は、最新の機種と割り切って
im.phpのデフォルト値を書き換えるのもありかもしれません。
mobilelist.cgiに機種情報が存在しない場合は、im.phpの以下のデフォルト値が適応されます。

$max_size = 5;
$max_width = 96;
$max_height = 72;
$color_size = 256;

blognplusをtext版からDB版(MySQL)に変更する

非力なCPUマシン+text使用で段々と表示速度が遅くなってきました。
(早いマシンだとtext使用でも、それ程遅くはなりません)

DB使用でどれくらい早くなるか分かりませんでしたが変更しました。
※blognplusを導入するサーバーがDBに対応してる必要があります。

ちなみに、それなりに手間は掛かりますので、完全に初期インストールして戻すよりも少しだけ楽な程度です(笑)

まずはblognplusを最新版にアップデート。
動かなくなるモジュールなどもあるので、最新のモジュールをDLして入れ替え。
現在のデータを管理画面>データ管理でバックアップ。

次に適当なディレクトリを作成して、そこに最新のblognplus初期インストール版を入れます。
初期設定を行って正常動作するか確認。
conf.phpをローカルにコピーして内容を編集する。

編集内容は、エディタで新規インストールをしたディレクトリ名を検索し
元々blognplusが入っているディレクトリに置換する。

編集したconf.phpを元々のディレクトリに上書きする。
(つまり欲しいのはDB設定したconf.phpだけなので、これを書き換え出来る人は新規で入れる必要はありません)

これでDB利用に切り替わっていますので、バックアップしたデータを使ってリストアする。
データ以外でもDBに保存されるものはあるので、一通り設定を見直してください。

blognplusのlockファイル

×ファイルはビジーです。少し待ってから実行してください。
とエラーが出て書き込み不可&コメント不可&表示激遅状態になってしまいました。
(サーバーダウンがトリガーか?)
原因は/blognplusのルート/dat/の下にlockファイルが無い為のようです。
lockファイルがlock~と変な英数字が付加したファイルに変わってしまっているようです。
lock~ファイルをrmで削除しlockファイルを新たに作成すれば現象はなくなりました。

この現象の一番の問題は投稿などを行わないと現象に気付き難い事でしょうか・・・
(表示自体は遅くなってるので気付く人は気付くかもですね)

blognplusのスパム対策

スパム対策までコメント、トラックバック共に許可していませんでしたが業者のスパムは余裕で書き込みをしてきます。
コメント、トラックバックを許可にしていれば対策していなくても仕方ない事だと感じますが
流石にコメント、トラックバックを許可していないのに書き込まれるのは不具合としか言いようがありませんね・・・

コメント、トラックバックの書き込み時に記事の設定を全くチェックしていないか
もしくはセキュリティ的に穴があるかのどちらかです。
(面倒でソースを見てませんが恐らく前者かと思います)
そもそも楽する為にblognplusを利用しているので調査まではしません!(笑)

以前の記事で紹介しているようにアタックの多い国からの接続を基本的には拒否しているので
それほどスパムも多くないのですがやはり専用のモジュールやパッチ等で対応はしておいた方がいいです。

blognplus標準のコメント投稿用画像認証モジュールです。
コメント投稿用画像認証モジュール

ゲットネットのTIPSにもスパム対策の方法が掲載されています。
ゲットネット
※既にリンク先のサイトはなくなっているようです