FancyURLで自動生成するファイル名をmod_rewrite
mod_rewriteとFancyURL - サモサーモ(いろいろ実験中)
ここの主にコメント欄で話し合ったんですが(^_^;
まずは前提として、この用語の意味は[→tips.htmlの日本語訳]にあります。
FancyURLだと、URLが階層になるので、画像指定を絶対パスにしなければならない、ファイルリンクも相対指定だとリンク先が期待するURLに変換されないなど、運用上、留意すべき点がたくさんあります。
mod_rewriteは、その点すべてのページ生成を.htmlに見せかけるのでルートにたくさんhtmlファイルがあるかのような見せかけになるのですが、スキン(又はテンプレート)のhref値を自分で編集しなければならないと言う面倒があります。
そこで、この2つを併用して、.htmlというURLを自動で生成して表示させる事を考えています。
まぁ、まずは、実験結果をご覧下さい。
http://xx.nakahara21.net/f.php
どうでしょうか?
全てのページがhtmlファイルであるかのようなURLを生成します。
ページが見つかりません、という表示が出たらそのurlをコメント欄にお願いします。
やり方は、globalfunctions.phpの書き換えになります。
しかしながら、このファイルはとても重要なファイルですので、別ファイルで運用できる検証方法として紹介します。
1)globalfunctions.phpを複製してglobalfunctions_f.phpと名付ける。
2)これをincludeするconfig.phpの複製「config_f.php」を作成して、中身の、最後の方を
include($DIR_LIBS.'globalfunctions_f.php');
と書き換えて保存。
3)これをincludeするindex.phpの複製「f.php」を作成して、中身の最初の方を
include('config_f.php');
と書き換えて保存。
4)以上の3つのファイルを上書き転送します。f.phpにアクセスすると、globalfunctions_f.phpを利用してページ生成する事ができます。従来のindex.phpはそのままですので、安全です。
このように下準備が終わったら、次はglobalfunctions_f.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行を追加。
保存後、上書きFTP転送。
次に、.htaccessファイルの編集。
=============
RewriteEngine On
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+).html+ f.php?catid=$1&blogid=$2
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+).html+ f.php?archive=$2-$3&blogid=$1
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)-([0-9]+).html+ f.php?archive=$2-$3-$4&blogid=$1
RewriteRule ^archive_([0-9]+)_([0-9]+)-([0-9]+)_catid_([0-9]+).html+ f.php?archive=$2-$3&blogid=$1&catid=$4
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+)-([0-9]+).html+ f.php?archive=$3-$4&blogid=$2&catid=$1
RewriteRule ^catid_([0-9]+)_blogid_([0-9]+)_archive_([0-9]+)-([0-9]+).html+ f.php?archive=$3-$4&blogid=$2&catid=$1
RewriteRule ^archivelist_([0-9]+).html+ f.php?archivelist=$1
RewriteRule ^archivelist_([0-9]+)_catid_([0-9]+).html+ f.php?archivelist=$1&catid=$2
RewriteRule ^catid_([0-9]+)_archivelist_([0-9]+).html+ f.php?archivelist=$2&catid=$1
=============
この例は、f.phpアクセス時に有効な例です。
これもサーバに転送したら、最後に管理メニューからFancyURLモードをonにして完了。
f.phpにアクセスしたときのみ、htmlで終わるURLで展開します。
Posted 09/30/03 by nakahara21 | Filed under: Consideration
Comments
Add Comment