Rewrite Conditions Backreferences passado para todas as regras?

1

Existe uma maneira de obter referências de condições de reescrita a serem passadas para todas as regras de reescrita subseqüentes?

Veja um exemplo:

RewriteEngine On    
RewriteCond %{HTTP_HOST} (bob).localhost [NC]    
RewriteRule ^/where/? /index.php\?user_name=%1
RewriteRule ^/who/? /index.php\?user_name=%1 

Neste exemplo, esperaria este comportamento:

http://bob.localhost/where => http://bob.localhost/where/index.php?user_name=bob
http://bob.localhost/who   => http://bob.localhost/who/index.php?usern_ame=bob

Mas, para a segunda regra, recebo link em seu lugar.

Eu tentei isso em várias distros diferentes usando o Apache 2.2.17

    
por frogstarr78 27.04.2011 / 23:29

2 respostas

2

As condições aplicam-se apenas à regra seguinte. Você precisará repetir a condição para que ela se aplique a outra regra:

RewriteCond %{HTTP_HOST} (bob).localhost [NC]    
RewriteRule ^/where/? /index.php\?user_name=%1
RewriteCond %{HTTP_HOST} (bob).localhost [NC]    
RewriteRule ^/who/? /index.php\?user_name=%1 

No seu exemplo, se o valor HTTP_HOST da sua solicitação não corresponder a (bob).localhost , sua solicitação ignorará a regra ^/where/? (mesmo que corresponda), mas poderá usar a ^/who/? regra.

    
por 27.04.2011 / 23:49
3

Como o DerfK indica, o reescrito é apenas para uma regra de reescrita.

No entanto, você pode considerar um estratego alternativo, configurando e lendo variáveis de ambiente.

# this grabby rewrite will match anything, 
# *and* set 'bob' in a custom rewrite environment variable 
# it uses 'next' with the 'no sub requests' caveat to avoid loops 
RewriteCond %{HTTP_HOST} (bob).localhost [NC]
RewriteRule ^(.*)$ - [env=host_uname:%1] [N,NS]

# All these rules should then be evaluated, 
# in the 'next' pass - with the 'host_uname' env variable available   
RewriteRule ^/where/? /index.php\?user_name=%{ENV:host_uname}
RewriteRule ^/who/? /index.php\?user_name=%{ENV:host_uname} 
    
por 28.04.2011 / 02:59