2012-03-09 2 views
4

это файл .htaccess на серверепеременная RewriteCond обратно соотнесение% 2

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} !^www. 
RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.domain.com(.*)$ 
RewriteRule ^(.*)$ http://domain.com/test\.php?user=%1&path=%2 [R] 

Согласно моему пониманию выше кода, если я прошу asher.domain.com/user он должен переписать http://domain.com/test.php?user=asher & путь =/пользователь правый?

Вместо этого я получаю http://domain.com/test.php?user=asher & путь =% 2 пуст. но если я использую $ 1 вместо % 2 Кажется, я получаю правильный результат.

Я мог бы сделать самую глупую ошибку, но я не уверен, где я ошибся. Помогите мне, ребята? где ошибка в правилах перезаписи, что% 2 не работает для меня?

ответ

3

Используя синтаксис $ дает RewriteRule обратные ссылки, в то время как % даст вам RewriteCond обратные ссылки. Документация mod_rewrite охватывает это.

В вашем случае, ваш RewriteRule должен выглядеть следующим образом:

RewriteRule ^(.*)$ http://domain.com/test\.php?user=%1&path=$1 [R] 

Потому что вы хотите, первый матч группы из предыдущего RewriteCond и первый матч группы из текущего RewriteRule.

+0

oh. Я ожидал, что «(. *)» во втором «RewriteCond» будет соответствовать% 2. это не так? – santosh

+0

Это так, но '$ {HTTP_HOST}' ничего не будет в нем передаваться '.com'. Это просто имя хоста, оно не содержит URI запроса. –

+0

о право. спасибо за это. – santosh

Смежные вопросы