CodeIgniterは、そのまま使うと、全ての呼び出しはindex.phpへの引数ってことになるんだけど、
CodeIgniter ユーザガイド 日本語版に書いてあるように、ApacheのRewrite設定とCodeIgniterの設定(config.php)を組み合せて、これを除去することができる。
このとき、以下のようなPHP警告メッセージが出ることがある。
A PHP Error was encountered Severity: Warning Message: strpos() [function.strpos]: Empty delimiter. Filename: core/URI.php Line Number: 160 A PHP Error was encountered Severity: Warning Message: strpos() [function.strpos]: Empty delimiter. Filename: core/URI.php Line Number: 164
以下、対処方法。
修正前。core/URI.phpの160行目あたりはこうなってる。
/** * Detects the URI * * This function will detect the URI automatically and fix the query string * if necessary. * * @access private * @return string */ private function _detect_uri() { if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME'])) { return ''; } $uri = $_SERVER['REQUEST_URI']; if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0) { $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME'])); } elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0) { $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME']))); }
$_SERVER[‘SCRIPT_NAME’]をstrposしてるんだけど、何も入ってないことを想定していないっぽい。
修正後。なんか入ってた時だけstrpos&substrをやる。
private function _detect_uri() { if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME'])) { return ''; } $uri = $_SERVER['REQUEST_URI']; if (strlen($_SERVER['SCRIPT_NAME'])) { if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0) { $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME'])); } elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0) { $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME']))); } }
同士はここに。