Назад | Перейти на главную страницу

Почему обратная ссылка на $ 1 работает при перезаписи без подгрупп?

Кто-то, с кем я работаю, передал в SVN RewriteRule, например следующее:

RewriteRule ^admin/ebay.*$ /yii.php/$1 [L]

Я предупредил его, что это может не сработать, потому что в совпадении нет подгруппы, которая соответствовала бы обратной ссылке на $ 1. Это действительно работает, и я озадачен. Я почти уверен, что он имел в виду одно из следующего:

RewriteRule ^admin/ebay.*$ /yii.php/$0 [L] # $0 is whole match

...или...

RewriteRule ^admin/ebay(.*)$ /yii.php/$1 [L] # $1 subgroup

Делает ли Apache предположение о обратных ссылках, о которых я никогда не знал? Почему его RewriteRule (верхнее) работает?

Как оказалось, $1 действительно не делать что-нибудь здесь. Следующее работает так же:

RewriteRule ^admin/ebay.*$ /yii.php [L]

(Обратите внимание, что в части перезаписи вообще нет обратной ссылки.)

Это работает, потому что Yii смотрит на $_SERVER['REQUEST_URI'] чтобы выяснить, что задумал пользователь. Фактически, Apache просто проходил пустым для $1 обратная ссылка, как и ожидалось.

Так что здесь нет ошибки сервера. :)

Попробуйте установить RewriteLog и RewriteLogLevel. Журнал может дать вам подсказку о том, откуда взялось это значение.