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'])));
}
}
同士はここに。