Назад | Перейти на главную страницу

Загадка htaccess mod_rewrite

Хорошо, у меня есть файл .htaccess, содержащий этот

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php?p=%{REQUEST_URI}&%{QUERY_STRING} [L]
</IfModule>

Проблема в том, что в apache 2.2.22 p а другие объекты запроса не проходят, но отлично работает в apache 2.4.2.

Так что в основном в apache 2.2.22 он просто перенаправляет все на index.php, но у него нет get объекты.

Любая помощь, спасибо.

Обновить

Хорошо, я изменил строку

RewriteRule . /index.php?p=%{REQUEST_URI}&%{QUERY_STRING} [L]

к

RewriteRule ^(.*) /index.php?p=$1 [L,QSA] А теперь на apache 2.2.22 p GET не проходит, но все добавляемые мной конкретные запросы проходят.

Так что если я сделаю

http://localhost/index/fun/buns/funds?man=woman

на 2.4.2 я получаю

array (size=2)
  'p' => string 'index/fun/buns/funds' (length=20)
  'man' => string 'woman' (length=5)

а на 2.2.22 получаю

array(1) {
  ["man"]=>
  string(5) "woman"
}

Чтобы быть ясным Я хочу, что происходит в 2.4.2, а 2.2.22 не работает.

Другое обновление Хорошо, похоже, что происходит следующее: когда я делаю / index / something, он автоматически принимает index.php и игнорирует его, он автоматически добавляет к нему .php, когда я этого не хочу. Есть идеи, как это остановить?

Необходимо поставить доп. -MultiViews в файл httpd.conf.