У меня есть следующие директивы mod_rewrite в файле .htaccess, так что URL-адреса, такие как http://example.com/foo/bar/baz, внутренне переписываются в index.php? Page = baz
RewriteEngine on
RewriteBase /foo/bar/
RewriteRule ^index.php - [L,NC]
RewriteRule ^([^/]*)/?$ index.php?&p=$1 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?&p=$1&v=$2 [L,QSA]
Отлично работает на
и все остальное, что у меня естьбросается на него, за исключением случаев, когда первый параметр является индексом.
Я включил RewriteLogLevel до 9,и я получаю записи, подобные этой, когда захожу на http://example.com/foo/bar/index/baz
[perdir ..../foo/bar/] add path info postfix: ..../foo/bar/index.php -> ..../foo/bar/index.php/baz
Так что, похоже, что-то внутреннее для apache фактически переписывает / index / часть URL в /index.php/ до того, как mod_rewriteвидит это, что является небольшой проблемой.Он не переписывает что-либо еще неправильно, просто индекс.
Я действительно не понимаю, почему он не будет работать с индексом, но будет работать со всем остальным.Это единственные директивы переписывания для этого проекта, в противном случае это стандартная установка.
Это Apache 2.2.21 и PHP 5.3.8.
Надеюсь, я нахожусьясно, но на всякий случай я хочу, чтобы URL переписывались так:
- / foo / bar / index -> /foo/bar/index.php?page=index
- / foo / bar / index / -> /foo/bar/index.php?page=index
- / foo / bar / page1 -> /foo/bar/index.php?page=page1
- / foo / bar / page2 / word -> /foo/bar/index.php?page=page2&v=word
Все работает нормально, за исключением URL-адресов с индексом.