NP_PseudoFancyURL2計画書
2006年11月3日
ラクーカンで FancyURL を実現するためのプラグイン計画書、第二弾。 NP_CachedFancyURL がうまく行かず頓挫する可能性、あるいは、こちらのほうがすぐに実装できる可能性があるため、平行して計画。(随時更新)
1)動作原理
『/toppage/item/1』はphpとして処理できないが、『/toppage/item/1/』は、このフォルダに index.php を導入することでphpとして処理できる。なら、Redirect で『/toppage/item/1』へのアクセスを『/toppage/item/1/』へ飛ばせば良い。index.php の内容は、
でよいため、キャッシュを作成するよりもファイル使用容量を抑えることができる。
2)使用できるディレクトリは、プラグインオプションで指定
あらかじめどのようなディレクトリを FancyURL としてフォローするのかを、プラグインオプションとして指定しておく。たとえば、
item, category, blog, archive, archivelist
などを用意し、これらをアルファベット順に並べる(あるいは、優先順位を決めておく)ようにしておけば、不必要にファイルの数が増えすぎる心配は無いはず。
3).htaccess の記述
おおよそ、次のような感じ。
ノート:
1)これは、NP_CachedFancyURL でもいえることだが、ErrorDocument 404 で飛ばした後、header('HTTP/1.1 303 Moved) 及び header('Location: xxxx') が効かない。また、meta タグの refresh も IE ではだめ(FireFox はOK)。.htaccess のレベルで処理する必要あり。
(追記)
IE でも次のようなphpを使用すると、meta タグの refresh で redirect できる。513バイト以上だと、404 Not Found でなくHTML が表示されるらしい。
1)動作原理
『/toppage/item/1』はphpとして処理できないが、『/toppage/item/1/』は、このフォルダに index.php を導入することでphpとして処理できる。なら、Redirect で『/toppage/item/1』へのアクセスを『/toppage/item/1/』へ飛ばせば良い。index.php の内容は、
include('../../../index.php');でよいため、キャッシュを作成するよりもファイル使用容量を抑えることができる。
2)使用できるディレクトリは、プラグインオプションで指定
あらかじめどのようなディレクトリを FancyURL としてフォローするのかを、プラグインオプションとして指定しておく。たとえば、
item, category, blog, archive, archivelist
などを用意し、これらをアルファベット順に並べる(あるいは、優先順位を決めておく)ようにしておけば、不必要にファイルの数が増えすぎる心配は無いはず。
3).htaccess の記述
おおよそ、次のような感じ。
ErrorDocument 404 /toppage/nucleus/action.php?action=plugin&name=PseudoFancyURL2&url=/toppage/nucleus/item/1/
ノート:
1)これは、NP_CachedFancyURL でもいえることだが、ErrorDocument 404 で飛ばした後、header('HTTP/1.1 303 Moved) 及び header('Location: xxxx') が効かない。また、meta タグの refresh も IE ではだめ(FireFox はOK)。.htaccess のレベルで処理する必要あり。
(追記)
IE でも次のようなphpを使用すると、meta タグの refresh で redirect できる。513バイト以上だと、404 Not Found でなくHTML が表示されるらしい。
<?php
header('Location: /nucleus/index.php');
header('HTTP/1.1 303 Moved');
?><html><head>
<meta http-equiv="Refresh" content="0;URL=/nucleus/index.php">
<style type="text/css">
/*<[![CDATA*/
body {
background-color: #ffffff;
color: #ffffff;
}
/*]]>*/
</style>
</head><body>
<span id="random">
<?php
$t='';
for ($i=0;$i<1025;$i++) $t.=chr(rand(0x41,0x5a));
echo $t;
?>
</span>
<script type="text/javascript">
/*<[![CDATA*/
try{
document.getElementById("random").innerHTML='';
document.location='/nucleus/index.php';
} catch(e) {}
/*]]>*/
</body></html>