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

Условия перезаписи Переданы ли обратные ссылки всем правилам?

Есть ли способ вернуть ссылки для условий перезаписи, которые будут переданы всем последующим правилам перезаписи?

Вот пример:

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

В этом примере я ожидал такого поведения:

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

Но за второе правило получаю http: //bob.localhost/who/index.php? user_name = вместо.

Я пробовал это на нескольких разных дистрибутивах, используя Apache 2.2.17.

Как указывает DerfK, rewritecond предназначен только для одного правила перезаписи.

Однако вы можете рассмотреть альтернативную стратегию, установив и прочитав переменные среды.

# 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} 

Условия применяются только к следующему правилу. Вам нужно будет повторить условие, чтобы оно применилось к другому правилу:

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 

В вашем примере, если значение HTTP_HOST вашего запроса не соответствие (bob).localhost, ваш запрос пропустит ^/where/? правило (даже если оно совпадает), но может использовать ^/who/? правило.