動的URLから静的URLへの変換
なるべく汎用になるように考えながら、もともと掲示板のスクリプトを再構築して RSS 送出機能つきの情報送出システム、簡単にいうと新着情報スクリプトを作っている。様々な機能を付加していくとブログと変わらなくなっていく。投稿フォームの画面構成をしていると使い勝手などでいろいろと考える。自分でそういう制作をしてみれば、この Nucleus をはじめとして世にあるブログツールの凄さがもっと分かってくる。
情報表示ページで Nucleus の FancyURL 機能と同様の静的アドレス変換機能を付加して実験してみた。こういった機能は今後かなり重要だと考えている。
- 表示スクリプト自体は拡張子をとったファイルにする。
- 表示スクリプトは
$idを(もともとは GET で)取得して、それに該当する情報を送出するものとして作る。 - .htaccsess に
<FilesMatch "^filename$">をいれて、 PHP と認識させる。 - 表示スクリプトの先頭で、アクセスURL名称を分割する
URL 分割スクリプトはこれだけ。
$data = explode("/",$_SERVER['PATH_INFO']);
$id = intval($data[1]);
これで「ファイル名/ID」でそこにアクセスすると、本来「ファイル名?extension」という URL でアクセスする状態になる。
速攻で作ってローカル(MacOSX Apache1.3 PHP 4.3)環境で動作確認できたので、実際にそのスクリプトを使うサーバーにいれたら「Not Found」。調べたら $_SERVER['PATH_INFO'] が Apache2.0 で使えないのがデフォルトということだった。それが分かるまで手間取った。
どういう理由があって使えなくなったのかが分かっていない状態ではあまりやるべきではないのだけど、一応解決策を見つけた。
Apache の設定ファイルで AcceptPathInfo On とする。そしてこの設定は .htaccsess 上でも可能。
実際のファイルのパスと表示した場合のパスが異なる点に注意。PHP 上のインクルード等は(絶対パスを使えば間違いない)相対パスの場合、もとのスクリプト自体のパスだけど、HTML 上での(画像とか、スタイルシートとか)データへのリンクは階層が変わる。これ、通常 ?以降になる QUERY STRING の変数の数分変わってしまうので、count($data) を使ってページ内の相対パス部分を自動化すればいい。このへんは作る側の工夫。パス制御はやっぱり結構ややこしいです。
2004年11月02日 10:38 | WebCreate | ichiro

