Por que uma referência anterior de $ 1 funciona em uma reescrita sem subgrupos?

4

Alguém com quem estou trabalhando comprometeu um RewriteRule como o seguinte para o SVN:

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

Eu avisei a ele que isso pode não funcionar porque não há um subgrupo na correspondência que correspondesse à referência anterior de $ 1. Funciona e estou perplexo. Tenho certeza de que o que ele pretendia era um dos seguintes:

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

... ou ...

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

O Apache faz uma suposição sobre backreferences que eu nunca conheci? Por que seu RewriteRule (o de cima) funciona?

    
por Ezekiel Victor 05.05.2011 / 00:16

2 respostas

3

Acontece que o $1 não faz nada aqui. O seguinte funciona da seguinte forma:

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

(não note nenhuma referência na parte de reescrita).

Isso funciona porque o Yii está analisando $_SERVER['REQUEST_URI'] para descobrir o que o usuário pretendia. Na verdade, o Apache estava passando apenas em branco para a referência anterior de $1 como esperado.

Portanto, não há falha no servidor aqui. :)

    
por 12.05.2011 / 19:01
1

Tente definir RewriteLog e RewriteLogLevel . O log pode lhe dar uma dica sobre a origem desse valor.

    
por 11.05.2011 / 19:52