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行目をにあるthreeStarsさんより)
$CONF['Self'] = 'http://www.yourhost.com/yourpath';
このhttp://www.yourhost.com/yourpathを自分のnucleus設置URLに書き直す。
最後に/(スラッシュ)をつけない。(
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行目辺り)の直前に、最後に管理メニューからFancyURLモードをonにしておしまいです。これで全てのページがhtmlであるかのように表示されるはずです。
$link = preg_replace( '/([^:])¥/¥/+/', '¥1/', $link );
を追加。
- 注1書いた内容は別ファイルにデータベースとして保存しておいて、ブラウザからアクセスされた時にデータベースから内容を呼び出して、その場でhtmlファイルを作って表示するタイプのこと。毎回アクセスされるたびにページを作っているので、動的といいます。
- 注2MovableTypeなどのように、何か書くとその場でその内容を含んだhtmlファイルが作られるタイプのこと。アクセスされるたびにページが作られているわけではなく、既に作られたページを表示しているので、静的といいます。
- 注3無料サーバーはユーザーが大抵一杯なのでそのままでは登録できませんが、value-domainからユーザー登録後、一カ月分(400円)だけ広告免除サービスを購入すれば、一杯になっていてもサーバーのアカウントが取れます。一旦アカウントが取れれば、一ヶ月が過ぎても無料サーバーとしてそのまま使えます。ただし、無料で使う場合は広告表示が必要です。
Posted by chihiro at 04:22 am | from category: nucleus
Comments
みるく:
こんばんわ!初めまして
こちらに、質問してもいいのかな・・・
えっと、↑の通りやってみたのですが、Categoryの所が表示されません
><;
↑のhtaccessの内容をそのまま
コピーして、globalfunctions.phpを
変えたのですが・・・・
こちらに、質問してもいいのかな・・・
えっと、↑の通りやってみたのですが、Categoryの所が表示されません
><;
↑のhtaccessの内容をそのまま
コピーして、globalfunctions.phpを
変えたのですが・・・・
(on January 26, 2004 at 01:41 am)
chihiro:
categoryがmagicalurlにならないということですか?
category以外はどうですか?例えばarchivesはmagicalurlになってます?
category以外はどうですか?例えばarchivesはmagicalurlになってます?
(on January 26, 2004 at 02:46 am)
みるく:
とりあえず、自分でやれる範囲は
やったのですが、やっぱり
magicalurlの
archives_1_catid_1.htmlが
うまく表示できないです^^;
やったのですが、やっぱり
magicalurlの
archives_1_catid_1.htmlが
うまく表示できないです^^;
(on January 27, 2004 at 01:07 am)
chihiro:
よく状況がわからないのですが、リンク自体は表示されていても、
item_1.htmlのようには表示されないということでしょうか?
もしそうなら、globalfunctions.phpとmod_rewriteの記述をもう一度見直してみてください。
それから、fancyURLモードはonにしましたか?
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の方もすべて_にしました。
一応、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の私の環境では上記の通りで問題なく動いているのですが・・・
一応、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したかったのですが、導入されていないようですね。うーん残念)
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はいまいちなじめないのではずしてしまいました。
#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
なんでここだけ逆なんだろう?と思いましたが、考えた所でわからないのでほっといてます(^^;)
カスタマイズたのしいですね〜
スラッシュをアンダーバーに単純に変えると勘違いして、はまりましたが、
一行をまるまるコピーして、無事に動きました。
(多分みるくさんもそのあたりじゃないかと思います。)
ところで、カテゴリーなどをぽちぽちクリックした後に
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)




