Apache-2.2
RewriteRule 應用模式,即使 RewriteCond 的 1 個失敗
#www. domain . tld RewriteCond %{HTTP_HOST} (?:.*\.)?([^.]+)\.(?:[^.]+)$ RewriteCond /home/%1/ -d RewriteRule ^(.+) %{HTTP_HOST}$1 RewriteRule (?:.*\.)?([^.]+)\.(?:[^.]+)/media/(.*)$ /home/$1/client/media/$2 [L] RewriteRule (?:.*\.)?([^.]+)\.(?:[^.]+)/(.*)$ /home/$1/www/$2 [L]
這是重寫日誌輸出:
#(4) RewriteCond: input='tfnoo.mydomain.org' pattern='(?:.*\.)?([^.]+)\.(?:[^.]+)$' [NC] => matched #(4) RewriteCond: input='/home/mydomain/' pattern='-d' => not-matched #(3) applying pattern '(?:.*\.)?([^.]+)\.(?:[^.]+)/media/(.*)$' to uri 'http://www.mydomain.org/files/images/logo.png' #(3) applying pattern '(?:.*\.)?([^.]+)\.(?:[^.]+)/(.*)$' to uri 'http://www.mydomain.org/files/images/logo.png' #(2) rewrite 'http://www.mydomain.org/files/images/logo.png' -> '/home/mydomain/www/logo.png'
如果您在 2nd 4 上註意到它失敗了 -d (如果目錄存在)模式。哪個是對的。mydomain 沒有 /home/。因此,它永遠不應該重寫,至少根據我的理解,所有重寫規則都受重寫條件作為邏輯 AND 的影響。
不,只包括緊跟在一個或多個
RewriteCond
指令之後的規則。那是:#www. domain . tld RewriteCond %{HTTP_HOST} (?:.*\.)?([^.]+)\.(?:[^.]+)$ RewriteCond /home/%1/ -d # This will only be run if the two conditions above, are met RewriteRule ^(.+) %{HTTP_HOST}$1 # These will always be run! RewriteRule (?:.*\.)?([^.]+)\.(?:[^.]+)/media/(.*)$ /home/$1/client/media/$2 [L] RewriteRule (?:.*\.)?([^.]+)\.(?:[^.]+)/(.*)$ /home/$1/www/$2 [L]
如果您在日誌中註意到,它會跳過第一個
RewriteRule
,但甚至不會檢查其他兩個的條件。