Mod Rewrite

zarus

Хитрожопый макак
Mod Rewrite

Windows XP, Denwer (Apache 1.3.x, PHP 5.1.2)

.htaccess
Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
При адресации на http://localhost/test/ все работает так, как надо:
$_SERVER[REQUEST_URI] => /test/
Но если пытаюсь загрузить главную страницу http://localhost/, то получается фигня
$_SERVER[REQUEST_URI] => /index.php/
и в адресной строке получается http://localhost/index.php/

Понимаю, что ошибка где-то в ДНК, но я генетику не знаю.
Может кто уже наступал на те же грабли, или знает, как их обойти. Ман по моду я читал, но он такой запутанный, что без поллитры там не разобраться. А нормального описания для чайников или кукбука я не нашел.
 

zarus

Хитрожопый макак
Не знаю почему, но проблема решилась "сама собой".
Код:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule ^$ index.php [L,QSA] 
RewriteRule ^([^.]+[^/])$ $1/ [R=301,L,QSA] 
RewriteRule ^([^.]+)/$ index.php [L,QSA]
Разбираю затем URL такой функцией:
PHP:
function getUriParams() {
  $ReqURI = explode ( '?' , $_SERVER['REQUEST_URI'] );
  $URI = implode( '/', array_values( array_filter( explode( '/', $ReqURI[0] ) ) ) );
  $arrPageInfo = array( 'page', 'id', 'type', 'lvl' );
  if ( preg_match( '~^(.*?)(?=\/(?:' . implode( '|', $arrPageInfo ) . ')\/.*|$|\?)~i', $URI, $match ) ) {
     $_REQUEST['base'] = $match[1];
  }
  if ( empty( $_REQUEST['base'] ) ) {
     $_REQUEST['base'] = 'news';
  }
  foreach ( $arrPageInfo as $value ) {
     if ( preg_match('~(?<=\/'.$value.'\/)([^\/]+)(?=\/|$)~i',$URI,$match) ) {
        $_REQUEST[$value] = $match[1];
     }
  }
  return $URI;
}
 
Сверху