ファイル名をディレクトリ名のように
PATH_INFOによるファイル名をディレクトリ名のように見せる方法を紹介します。通常、以下のような引数を用いてスクリプトに動的な振る舞いを行います。
http://rakuto.net/browse.php?page=path_info
rakutoネットではPATH_INFOを用いて以下のように引数をPATHに組み込んでいます。
http://rakuto.net/browse/path_info/
.htaccess等のHTTPサーバ設定
## PathInfoを有効
AcceptPathInfo On
## HTTPモジュールの場合
<FilesMatch "^browse$">
ForceType application/x-httpd-php
</FilesMatch>
## CGIの場合
<FilesMatch "^browse$">
ForceType application/x-httpd-cgi
</FilesMatch>FilesMatchによりbrowseというファイルのForceTypeがPHPスクリプトである
と宣言しています。
詳しくはApacheのマニュアルを参照してください。
スクリプト側の処理
/** * パスインフォからページ名を取得 * CGIの場合は$_SERVER['ORIG_PATH_INFO']になります。 */ $path_info = empty($_SERVER['PATH_INFO'])?'':$_SERVER['PATH_INFO']; $args = explode('/',$path_info); // PATH_INFOには'/'から始まるpath情報が入る為、引数は1番目になります。 $page = empty($args[1])?'page':$args[1];
PATH_INFOを使ったFront Controller
/* パスインフォからページ名を取得 */ $path_info = empty($_SERVER['PATH_INFO'])?'':$_SERVER['PATH_INFO']; $args = explode('/',$path_info); $page = empty($args[1])?'tree':$args[1]; $modules = array( 'tree', 'browse', 'post', 'search', 'summary' ); /* 不正アクセスがないかチェック */ if (!in_array($page,$module)) { $page = 'tree'; } /* モジュールの読み込み */ include_once $page.'.php';
