しばしばMVC的に「まずはメインのphp(=コントローラ)にアクセスさせる」ような作り方をすることがあります。ユーザがアクセスするURLをコントローラ側で解析して処理を分岐させるわけですね。

 

.htaccessを使って(ディレクトリやファイルが存在しない)すべてのアクセスを所定のphpスクリプトに引き渡します。

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /mysystem/index.php [L]

で、コントローラ(/mysystem/index.php)ではこんな感じで処理します。

<?php
// QueryString を取り出して分解
$QRYSTR = $_SERVER['QUERY_STRING'];
parse_str($QRYSTR, $QRYARR);

// RequestURI を解析
if (isset($_SERVER['REQUEST_URI'])) {
    $requri = $_SERVER['REQUEST_URI'];
    //    ? 以降(QueryString)を削除
    if ($pos = strpos($requri, '?')) $requri = substr($requri, 0, $pos);
    //    先頭が / だったら削除
    while (substr($requri, 0, 1) === '/') $requri = substr($requri, 1);
    //    最後が / だったら削除
    if (substr($requri, strlen($requri)-1) === '/') $requri = substr($requri, 0, strlen($requri)-1);
    $REQPATH = explode('/', $requri);
} else {
    heaader('content-type: text/plain');
    die('abort');
}
// pathの第一階層の文字列に該当するincファイルがあればそれを呼び出して終了

if (count($REQPATH) > 0) {
    $inc = $REQPATH[0] . '.inc';
    if (file_exists($inc)) {
        array_shift($REQPATH);
        include($inc);
        exit;
    }
}
// 処理できなければ404エラーにする
include ('404.inc');

#上記ソースは手元でテストしている環境のものです

 

続きを読む >>