Есть ли способ вернуть ссылки для условий перезаписи, которые будут переданы всем последующим правилам перезаписи?
Вот пример:
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/?
правило.