mod_rewrite редирект от параметров GET

Sepuka

Новичок
mod_rewrite редирект от параметров GET

PHP:
# при определенном браузере
RewriteCond	%{HTTP_USER_AGENT}	.*opera.*	[NC]  
# и таких-то $_GET параметрах
RewriteCond	%{QUERY_STRING}		^l=ru&doc=(.*)$  
# я хочу перенаправить пользователя на $_GET['doc']
RewriteRule	^index.php$		%1.html		[R]
перенаправление проходит, но к %1.html добавляется еще и %{QUERY_STRING}
получается что-то вроде http://хост/путь/файл.html?l=ru&doc=файл
Как убрать параметры в конце?
 

zerkms

TDD infected
Команда форума
Код:
RewriteEngine On

# и таких-то $_GET параметрах
RewriteCond    %{QUERY_STRING}        ^l=ru&doc=(.*)$  
# я хочу перенаправить пользователя на $_GET['doc']
RewriteRule    ^index.php$        /%1.html? [R,L]
Код:
[url]http://localhost/index.php?l=ru&doc=a[/url]

Заголовки ответа
Date	Mon, 14 Sep 2009 16:01:23 GMT
Server	Apache/1.3.35 (Win32) PHP/5.2.10
Location	[url]http://localhost/a.html[/url]
Keep-Alive	timeout=15, max=99
Connection	Keep-Alive
Transfer-Encoding	chunked
Content-Type	text/html; charset=iso-8859-1

Заголовки запроса
Host	localhost
User-Agent	Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language	ru,en-us;q=0.7,en;q=0.3
Accept-Encoding	gzip,deflate
Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive	300
Connection	keep-alive
Но вообще тупо, что оно добавляет квери стринг, когда его об этом не просят.
 

FractalizeR

Новичок
Если вам нужно отбрасывать оригинальную QUERY_STRING, нужно к правилу добавить "?".

Код:
RewriteRule    ^index.php$        %1.html?
Но вообще тупо, что оно добавляет квери стринг, когда его об этом не просят.
Вообще-то это часть функционала. Если бы оно ее отбрасывало, зачем тогда QSA флаг? :)
 

zerkms

TDD infected
Команда форума
FractalizeR
Если вам нужно отбрасывать оригинальную QUERY_STRING, нужно к правилу добавить "?".
ну как бы в моём коде это уже есть :)

Если бы оно ее отбрасывало, зачем тогда QSA флаг?
перечитай меня вдумчиво ещё раз.

повторю более доходчиво: для обычных правил добавление квери стринга осуществляется добавлением флага QSA. вопрос знатокам: почему при использовании R это правило не соблюдается и апач сам без спроса добавляет параметры?
 

FractalizeR

Новичок
Описание флага QSA в документации апача:
"This flag forces the rewriting engine to append a query string part in the substitution string to the existing one instead of replacing it."

То есть, если флага QSA нет, указанная QUERY_STRING в строке подстановки замещает ту, что была в запросе. А если есть, то указанная QUERY_STRING в строке подстановки добавляется к той, что была в запросе. Где тут неверное функционирование? Строка подстановки переносится всегда.
 
Сверху