mod_rewrite и QUERY_STRING

alexhemp

Новичок
mod_rewrite и QUERY_STRING

Всегда был уверен, что mod_rewrite добавляет QUERY_STRING только если указан флаг 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. Use this when you want to add more data to the query string via a rewrite rule.
Небольшой эксперимент показал что query string добавляется всегда

Итак в .htaccess
RewriteRule ^test\.html$ test.php [L,NC,NS]

вызываем http://test.site/test.html?test=1

В скрипте $_GET['test'] = 1

Внимательно прочитав описание флага я так и не понял, что все-таки он делает. Мне казалось без этого флага исходная QUERY_STRING доступна только через переменную %{QUERY_STRING}. Или я не понял - и этот флаг значит что поиск паттерна нужно производить в полном URL до отрезания QUERY_STRING?

Есть ли возможность ограничить передачу QUERY_STRING в скрипты при использовании mod_rewrite? Apache 1.3.33
 

Steamroller

Новичок
Вкратце так:
QSA - это для того случая, когда ты сам уже какие-то параметры пишешь в конечном урле, например:

RewriteRule ^test\.html$ test.php?param=1 [L]
не добавит QUERY_STRING в конец
RewriteRule ^test\.html$ test.php [L]
добавит QUERY_STRING в конец


RewriteRule ^test\.html$ test.php?param=1 [L,QSA]
добавит QUERY_STRING в конец
RewriteRule ^test\.html$ test.php [L,QSA]
добавит QUERY_STRING в конец




Если ты хочешь чтобы наоборот зарубилась строка (т. е. при запросе test.html?param=2 запросилось test.php без всяких параметров) то пишешь:
RewriteRule ^test\.html$ test.php? [L]
(просто вопросик добавляешь).

[add]вначале лишний QSA там написал[/add].
 
Сверху