gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「URLの擬似静的化」のMagicWeapon用の覚え書き

今度どこか(多分github)にまとめますが。
簡易的に、MagicWeapon用のをmemoっておきます。


mod_rewriteの記述

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


振り分け用のベース(index.phpに記述する)

// c=の動的解決用下ごしらえ
// パラメタ部分を除去する
//var_dump($_SERVER);
@list($path, $dummy) = explode('?', $_SERVER['REQUEST_URI'], 2);
//var_dump($path);

// DocumentRootじゃない場合は、ここで削る
//$path = substr($path, strlen('/削るディレクトリ名'));
//var_dump($path);

// XXX ディレクトリで終わるとファイル名ん所にディレクトリ名が入っちゃうんで、小細工
$dflg = false;
if ('/' !== $path) { // topディレクトリのみ指定、の時は除外
if ('/' === $path[strlen($path) - 1]) {
$dflg = true;
$path = $path . 'dummy_file';
}
}
// ファイル情報を取得
$pathinfo = pathinfo($path);
//var_dump($pathinfo);

// ファイル名ダミーの時の消去
if (true === $dflg) {
$pathinfo['basename'] = '';
$pathinfo['filename'] = '';
}
//var_dump($pathinfo);

// 使うので$_SERVERに突っ込んどく
$_SERVER['EX_PATHINFO'] = $pathinfo;

// 明らかにオカシイのはここで刎ねる!
// XXX これやらないと、エラーが多い画面とか、重い重い orz
if ( ('html' !== @$pathinfo['extension'])&&('' !== $pathinfo['basename']) ) {
if ('index.php' !== $pathinfo['basename']) {
header("HTTP/1.1 404 Not Found");
echo '404 Not Found';
exit;
}
}

// ------------------------------------------
// URLからの、c=(コマンド)の動的な解決
// ------------------------------------------
//var_dump($_GET);
if ('' === (string)@$_GET['c']) {
// 分解
$dirs = explode('/', $pathinfo['dirname'] . '///');
// デフォルトの解決
if ('' === $dirs[1]) {
$dirs[1] = 'index';
}
if ('' === $dirs[2]) {
$dirs[2] = 'index';
}
// コマンド名の自動生成
$_GET['c'] = "{$dirs[1]}_{$dirs[2]}";
}

//var_dump($_GET);