Нежелательное поведение mod_rewrite - PullRequest
0 голосов
/ 07 мая 2009

Я только что сделал новую установку стека ламп в Ubuntu и включил модуль mod_rewrite для моего веб-сайта по умолчанию. Я хочу что-то похожее на запросы drupal, когда вся строка запроса хранится в одной переменной. Для этих целей может использоваться следующий код mod_rewrite:

RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

Проблема начинается, когда какая-то строка начинается с имени файла, уже существующего в каталоге; Например, если я открываю страницу: http://localhost/home/blablabla - содержимое $ _GET выглядит следующим образом:

Array ( [q] => home.php ) 

То, что я хочу увидеть:

Array ( [q] => home/blablabla ) 

Я думаю, что это что-то со стандартным веб-сайтом или конфигурацией mod_rewrite, но я просто не могу понять ...

Ответы [ 3 ]

2 голосов
/ 07 мая 2009

Вы должны исключить home.php:

RewriteCond %{REQUEST_URI} !^/home\.php$
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

Или вы исключаете все существующие файлы:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

Причина: флаг L вызывает внутреннее перенаправление с новым переписанным URL-адресом. И новый URL home.php также соответствует выражению ^(.*)$.

0 голосов
/ 11 мая 2009

Похоже, что вам может понадобиться недавно добавленный флаг [DPI], чтобы отбросить PATH_INFO с несколькими переписываниями для каждого каталога.

0 голосов
/ 07 мая 2009

Не точно ответ на ваш вопрос, но не для этого ли _SERVER ["REQUEST_URI"] и _SERVER ["REDIRECT_URL"]?

...