RewriteCond
定義規則條件的指令格式
RewriteCond指令定義一條規則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,只有當自身的模式(pattern)匹配成功且這些條件也滿足時規則才被應用於當前URL處理。
RewriteCond TestString CondPattern [flags]
RewriteCond指令定義一條規則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,只有當自身的模板(pattern)匹配成功且這些條件也滿足時規則才被應用於當前URL處理。
1、 TestString是一個純文本的字元串,除了包含普通的字元外,還可以包括下列的可擴展結構:
1)$N:RewriteRule後向引用,其中(0 <= N <= 9) 。$N引用緊跟在RewriteCond後面的RewriteRule中模板中的括弧中的模板在當前URL中匹配的數據。
2)%N:RewriteCond後向引用,其中(1 <= N <= 9) 。%N引用最後一個RewriteCond的模板中的括弧中的模板在當前URL中匹配的數據。
3)${mapname:key|default}:RewriteMap擴展。
2、CondPattern是條件pattern, 即一個應用於當前實例TestString的正則表達式, 即TestString將會被計算然後與CondPattern匹配。作為一個標準的擴展正則式,CondPattern有以下補充:
1)可以在模板串前增加一個!前綴,以用表示不匹配模板。但並不是所有的test都可以加!前綴。
2)CondPattern中可以使用以下特殊變數:
'
'>CondPattern’ (大於) 將condPattern當做一個普通字元串,將它和TestString進行比較,當TestString 的字元大於CondPattern為真。
‘=CondPattern’ (等於) 將condPattern當做一個普通字元串,將它和TestString進行比較,當TestString 與CondPattern完全相同時為真。如果CondPattern只是“” (兩個引號緊挨在一起) 此時需TestString 為空字元串方為真。
‘-d’ (是否為目錄) 將testString當做一個目錄名,檢查它是否存在以及是否是一個目錄。
‘-f’ (是否是regular file) 將testString當做一個文件名,檢查它是否存在以及是否是一個regular文件。
‘-s’ (是否為長度不為0的regular文件) 將testString當做一個文件名,檢查它是否存在以及是否是一個長度大於0的regular文件。
‘-l’ (是否為symbolic link) 將testString當作一個文件名,檢查它是否存在以及是否是一個 symbolic link。
‘-F’ (通過subrequest來檢查某文件是否可訪問) 檢查TestString是否是一個合法的文件,而且通過伺服器範圍內的當前設置的訪問控制進行訪問。這個檢查是通過一個內部subrequest完成的, 因此需要小心使用這個功能以降低伺服器的性能。
‘-U’ (通過subrequest來檢查某個URL是否存在) 檢查TestString是否是一個合法的URL,而且通過伺服器範圍內的當前設置的訪問控制進行訪問。這個檢查是通過一個內部subrequest完成的, 因此需要小心使用這個功能以降低伺服器的性能。
3、[flags]是第三個參數,多個標誌之間用逗號分隔。
1)’nocase|NC’ (不區分大小寫) 在擴展后的TestString和CondPattern中,比較時不區分文本的大小寫。注意,這個標誌對文件系統和subrequest檢查沒有影響.
2)’ornext|OR’ (建立與下一個條件的或的關係) 默認的情況下,二個條件之間是AND的關係,用這個標誌將關係改為OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 如果沒有[OR]標誌,需要寫三個條件/規則.