MagicalURLのまとめ

December 23, 2003

nucleusは動的にリンクを生成*1しますので、カテゴリーなどへのリンクは
http://hoge.com/index.php?catid=1&blogid=1
のように、ごちゃごちゃしたアドレスになってしまいます。
これをあたかも静的にリンクを生成*2しているかのようにするモードがxx.nakahara21.netさんで紹介されているMagicalURLです。

MagicalURLでは、先程のリンクを
http://hoge.com/catid_1_blogid_1.html
のように、あたかもhtmlであるかのように見せかけることができます。これは、見た目がすっきりとしていていいだけでなく、検索エンジンにnucleusのページが引っかかりにくいという問題の解決にもなります。
ただし、MagicalURLではmod_rewriteというURLを書き換えるモジュールを利用しますので、サーバーでmod_rewriteが使えない場合は利用できません。xreaではOKでしたので、無料or格安サーバーを探しているならおすすめしておきます*3

以下はNucleus2.0日本語パックEUC-JP(03年12月14日版)をMagicalURLで運用する手順です。
基本的にやっていることは、fancyURLがディレクトリに見せかけているところをちょっと変更して、htmlに見せかけているわけです。ですから、nucleusのバージョンが変わっても、fancyURLモードがある限りはmagicalURLにするやり方は変わらないと思います、たぶん。

xx.nakahara21.netさんより
globalfunctions.phpの編集。
160行目付近
=============
// decode path_info
if ($CONF['URLMode'] == 'pathinfo') {
$data = explode("/",serverVar('PATH_INFO'));
=============
を以下のように書き換え
=============
// decode path_info
if ($CONF['URLMode'] == 'pathinfo') {
$data_str = preg_replace("/.html$/",'', serverVar('PATH_INFO') );
$data = explode("_",$data_str);
=============

次に、リンク生成functionを編集。
720行目付近から
=============
$link = $CONF['ItemURL'] . '/item/' . $itemid;
=============
を、以下のように。
=============
$link = $CONF['ItemURL'] . '/item_' . $itemid;
=============

同様に、以下は対で列挙。
=============
// $link = $CONF['MemberURL'] . '/member/' . $memberid;
$link = $CONF['MemberURL'] . '/member_' . $memberid;
=============
// $link = $CONF['CategoryURL'] . '/category/' . $catid;
$link = $CONF['CategoryURL'] . '/catid_' . $catid;
=============
// $link = $CONF['ArchiveListURL'] . '/archives/' . $blogid;
$link = $CONF['ArchiveListURL'] . '/archivelist_' . $blogid ;
=============
// $link = $CONF['ArchiveURL'] . '/archive/'.$blogid.'/' . $archive;
$link = $CONF['ArchiveURL'] . '/archive_'.$blogid.'_' . $archive ;
=============
// $link = $CONF['BlogURL'] . '/blog/' . $blogid;
$link = $CONF['BlogURL'] . '/blogid_' . $blogid;
=============
// $link .= '/' . $param . '/' . urlencode($value);
$link .= '_' . $param . '_' . urlencode($value);
=============

最後に、function addLinkParams(..)内の
return $link;
の前の行に
$link .= ".html";
と1行を追加。

次に、.htaccessファイルの編集。
=============
RewriteEngine On

RewriteRule ^catid_([0-9]+)_blogid_([0-9]+).html+ index.php?catid=$1&blogid=$2

RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1

RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3-$4&blogid=$1

RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)_catid_([0-9]+).html+ index.php?archive=$2-$3&blogid=$1&catid=$4

RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$3-$4-$5&blogid=$2&catid=$1

RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+).html+ index.php?archive=$3-$4&blogid=$2&catid=$1

RewriteRule ^archivelist_([0-9]+).html+ index.php?archivelist=$1

RewriteRule ^archivelist_([0-9]+)_catid_([0-9]+).html+ index.php?archivelist=$1&catid=$2

RewriteRule ^catid_([0-9]+)_archivelist_([0-9]+).html+ index.php?archivelist=$2&catid=$1

RewriteRule ^item_([0-9]+)_catid_([0-9]+).html+ index.php?itemid=$1

RewriteRule ^item_([0-9]+).html+ index.php?itemid=$1

RewriteRule ^member_([0-9]+)_catid_([0-9]+).html+ index.php?memberid=$1

RewriteRule ^member_([0-9]+).html+ index.php?memberid=$1

RewriteRule ^blogid_([0-9]+).html+ index.php?blogid=$1
=============

Nucleus情報-暫定版
さんより
fancyurls.config.phpをテキストエディタで開く。38行目をにある
 $CONF['Self'] = 'http://www.yourhost.com/yourpath';
 このhttp://www.yourhost.com/yourpathを自分のnucleus設置URLに書き直す。
 最後に/(スラッシュ)をつけない。(
threeStarsさんより)

Nucleusのrootにあるindex.phpをダウンロードして、テキストエディタで開く。
 $CONF['Self'] = "index.php";
 となっている部分へ行き、index.phpを消し下のようにする。
 $CONF['Self'] = ".";

threeStarsさんより(これは2.50cvsでは必要ないようです。b e c kさんより)
globalfunctions.phpのfunction addLinkParamsの$link .= ".html";(788行目辺り)の直前に、
$link = preg_replace( '/([^:])¥/¥/+/', '¥1/', $link );
を追加。
最後に管理メニューからFancyURLモードをonにしておしまいです。これで全てのページがhtmlであるかのように表示されるはずです。
  • 注1書いた内容は別ファイルにデータベースとして保存しておいて、ブラウザからアクセスされた時にデータベースから内容を呼び出して、その場でhtmlファイルを作って表示するタイプのこと。毎回アクセスされるたびにページを作っているので、動的といいます。
  • 注2MovableTypeなどのように、何か書くとその場でその内容を含んだhtmlファイルが作られるタイプのこと。アクセスされるたびにページが作られているわけではなく、既に作られたページを表示しているので、静的といいます。
  • 注3無料サーバーはユーザーが大抵一杯なのでそのままでは登録できませんが、value-domainからユーザー登録後、一カ月分(400円)だけ広告免除サービスを購入すれば、一杯になっていてもサーバーのアカウントが取れます。一旦アカウントが取れれば、一ヶ月が過ぎても無料サーバーとしてそのまま使えます。ただし、無料で使う場合は広告表示が必要です。
Posted by chihiro at 04:22 am | from category: nucleus

Comments

みるく:

こんばんわ!初めまして
こちらに、質問してもいいのかな・・・
えっと、↑の通りやってみたのですが、Categoryの所が表示されません
><;
↑のhtaccessの内容をそのまま
コピーして、globalfunctions.phpを
変えたのですが・・・・
(on January 26, 2004 at 01:41 am)

chihiro:

categoryがmagicalurlにならないということですか?
category以外はどうですか?例えばarchivesはmagicalurlになってます?
(on January 26, 2004 at 02:46 am)

みるく:

とりあえず、自分でやれる範囲は
やったのですが、やっぱり
magicalurlの
archives_1_catid_1.htmlが
うまく表示できないです^^;
(on January 27, 2004 at 01:07 am)

chihiro:

よく状況がわからないのですが、リンク自体は表示されていても、
item_1.htmlのようには表示されないということでしょうか?
もしそうなら、globalfunctions.phpとmod_rewriteの記述をもう一度見直してみてください。
それから、fancyURLモードはonにしましたか?
(on January 27, 2004 at 02:34 am)

みるく:

うまく説明が出来なくてすみません。
一応、fancyURとmagicalurlの設定はすでにやりました。
表示されているのがarchives_1_catid_1.htmlです。
globalfunctionsの方もすべて_にしました。
(on January 27, 2004 at 03:48 am)

みるく:

globalfunctionsの中を少し変えたら直りました^^;ありがとです。
(on January 27, 2004 at 04:17 am)

chihiro:

できたようでなによりですが、globalfunctionsはどう変えたのでしょう?説明、間違ってました?
一応、v2.0の私の環境では上記の通りで問題なく動いているのですが・・・
(on January 27, 2004 at 07:17 am)

b e c k:

はじめまして。
foobar2kの記事からこちらを覗かせていただいて、Nucleusもすごく面白そうなのでMTから乗り換えてみました。
Nucleusのカスタマイズも参考になりありがたい限りです。

さて私もv2.50cvsでfancyURLを試してみました。
最初はエラーが出たのですが、
--------------------------------------------------------------
globalfunctions.phpのfunction addLinkParamsの$link .= ".html";(788行目辺り)の直前に、
$link = preg_replace( '/([^:])\/\/+/', '\1/', $link );
を追加。
--------------------------------------------------------------
これは2.50cvsでは必要ないようです。
(phpがエラー吐いてくれたんで場所はすぐ特定できました)

ps.非常に参考になったのでTrack Backしたかったのですが、導入されていないようですね。うーん残念)
(on April 20, 2004 at 08:25 pm)

chihiro:

大変参考になるコメントをありがとうございます。Nucleus面白いですよね。
#Track Backはいまいちなじめないのではずしてしまいました。
(on April 21, 2004 at 05:56 pm)

tori:

はじめまして。わかりやすくて、とても参考になりました。
スラッシュをアンダーバーに単純に変えると勘違いして、はまりましたが、
一行をまるまるコピーして、無事に動きました。
(多分みるくさんもそのあたりじゃないかと思います。)

ところで、カテゴリーなどをぽちぽちクリックした後に
todayのリンクがblogid_1_catid_2.htmlと、htaccessに登録しているのと
逆になることがあるようだったので、そちらを追加してみました。
RewriteRule ^blogid_([0-9]+)_catid_([0-9]+).html+ index.php?blogid=$1&catid=$2

なんでここだけ逆なんだろう?と思いましたが、考えた所でわからないのでほっといてます(^^;)
カスタマイズたのしいですね〜
(on May 26, 2004 at 10:02 pm)
COMMENT投稿フォーム
:

:
: