Apache-2.2
重寫條件反向引用傳遞給所有規則?
有沒有辦法取回重寫條件的引用以傳遞給所有後續重寫規則?
這是一個例子:
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 在幾個不同的發行版上嘗試過這個
條件僅適用於下一條規則。您需要重複該條件才能將其應用於另一條規則:
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/?
規則。
正如 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}