19 April '2005 - 02:37 | Pivot pivot の mod_rewrite が気に入らない
だいぶ前にフォーラムに書いても反応がなかったので、たぶん、誰も関心がないのだろうけれど、現在の pivot の mod_rewrite の使い方は最悪。まったく気に入らない。 最近、作者の Bob とは国際化関連で濃い議論をしているので、話のついでに mod_rewrite の件もちょっと文句を言ったのだが、それよりも先にやらないといけないことが多いってことで、あまり共感を得られていない。まあ、そういうどうでもいい細かいことを理解させるべく注力するよりも、他のいろいろと理解してもらわないといけないことを納得させる方が重要なわけで、当分、この問題は放置されることになりそう。
何が気に入らないかというと、mod_rewrite を使う設定にすると、URL が /archive/$year/$month/$date/$title になってしまうこと。年月日はまあいいとしても、エントリのタイトルを URL に使うと化ける。化けるので、urlencode する必要があるが、うっとうしい。はてな方式もいいが、なんで mod_rewrite の利用イコール、エントリのタイトル利用にならないといけないのかってのが疑問。ていうか、気に入らない。
なので、自由にフォーマットを決められるようにハックしてみた。
--- modules/module_parser.php.orig Sun Feb 20 22:44:32 2005と
+++ modules/module_parser.php Tue Apr 19 02:24:16 2005
@@ -1041,18 +1047,18 @@
if (!$Weblogs[$weblog]['live_entries']) {
$filelink = $Paths['pivot_url'] . $Weblogs[$Current_weblog]['entry_path'] . $Weblogs[$Current_weblog]['entry_filename'];
- } else if ( (isset($Cfg['mod_rewrite'])) && ($Cfg['mod_rewrite']==1) && ($temp_entry['date']!="") ) {
+ } else if ( (isset($Cfg['mod_rewrite'])) && (strlen($Cfg['mod_rewrite'])>5) && ($temp_entry['date']!="") ) {
// if $temp_entry['date'] is not set, we cant make the non-crufty url,
// and we fall back to the crufty one..
list($yr,$mo,$da,$ho,$mi)=split("-",$temp_entry['date']);
-
- $name = (strlen($temp_entry['title'])>1) ? $temp_entry['title'] : substr(strip_tags($temp_entry['introduction']),0,100);
- $name = safe_string(trim($name), TRUE);
-
- if (strlen($name)>30) { $name = substr($name, 0, 30); }
- $filelink = $Paths['log_url'] . "/archive/$yr/$mo/$da/".$name;
+ $filelink = $Cfg['mod_rewrite'];
+ $filelink = str_replace("%pivot", $Filelinks['pivot_url'], $filelink);
+ $filelink = str_replace("%year", $yr, $filelink);
+ $filelink = str_replace("%month", $mo, $filelink);
+ $filelink = str_replace("%day", $da, $filelink);
+ $filelink = str_replace("%title", urlencode($temp_entry['title']), $filelink);
} else {
$filelink = $Paths['pivot_url'] . "entry.php?id=%1$parameter";
if ($para_weblog) { $filelink .= "&w=".$Current_weblog; }
--- pv_data.php.orig Fri Feb 18 22:56:40 2005をやると、mod_rewrite の設定が、オン/オフから、フォーマット設定に変わるので、そこに、
+++ pv_data.php Tue Apr 19 01:32:30 2005
@@ -239,7 +239,8 @@
),
//array('targetblank', lang('config','new_window'), lang('config','new_window_desc'), 3, 'yn', '', '1'),
- array('mod_rewrite', lang('config','mod_rewrite'), lang('config','mod_rewrite_desc'), 3, 'yn', '', '1'),
+ array('mod_rewrite', lang('config','mod_rewrite'), lang('config','mod_rewrite_desc'), 0, '%pivot/entry.php?id=%1', '', '1'),
array('search_index', lang('config','search_index'), lang('config','search_index_desc'), 3, 'yn', '', '1'),
array('allow_comments', lang('config','default_allow_comments'), lang('config','default_allow_comments_desc'), 3, 'yn', '', '1'),
array('maxhrefs', lang('config','maxhrefs'), lang('config','maxhrefs_desc'), 0, '5', '', ''),
/~naokih/entry_%1.htmlと書いて、.htaccess に
RewriteEngine onと書いたのが、このサイトの現在の設定。
RewriteRule ^entry_(.+).html$ /~naokih/pivot/entry.php?id=$1
これで、エントリの URL は entry.php?id=1298 ではなく entry_1298.html となる。全ての場所を確認したわけじゃないけれど、とりあえず、希望通りに動いているっぽいので一応の満足とする。あとは、タイミングを見て営業活動をす るのを忘れないように、と。