2009-05-07 5 views
0

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

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

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

Array ([q] => home.php) 

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

Array ([q] => home/blablabla) 

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

ответ

2

Вы должны исключить 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 flag causes an internal redirect с новым переписанного URL. И новый URL-адрес home.php также соответствует выражению ^(.*)$.

+0

Исключая существующие файлы (и каталоги) с помощью приведенной выше команды, очень удобно, однако в этом случае $ _GET появляется как пустой ... – turezky

+1

MultiViews может вызвать это поведение. Попробуйте отключить его. См. Http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews – Gumbo

+0

Yeap, это :) Отключение сразу :) – turezky

0

не точно ответ на ваш вопрос, но это не то, что _SERVER [ «REQUEST_URI»] и _SERVER [ «REDIRECT_URL»] предназначены для?

0

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