本文結合官方文檔和相關示例,詳細記錄了在IIS中URL重寫工具下的規則條件(Rule conditions)的相關說明。規則條件允許我們通過額外的邏輯規則來過濾和匹配規則模式( rule pattern ),所以只有當規則模式的URL匹配成功時,Rule conditions才會起作用。
先附上官方文檔地址:Rule conditions。下面會詳細說明規則中的各種屬性和設置。
邏輯分組
邏輯分組只有兩個選項,任意匹配和全部匹配。規則條件是由多個條件組成的一個條件集合,所以最終判斷需要根據邏輯分組來的設置來選擇計算方法。
就如同字面上的意思,如果選擇任意匹配,只要在條件集合中有一個條件規則符合匹配,那么整體的規則條件就是有效的,相當于編程中的或運算。而如果選擇全部匹配,只有當條件集合中的所有規則全部匹配成功,規則條件才算是有效的規則,相當于編程中的與運算。
匹配類型
按照文檔所說,定義一個規則條件主要通過設置兩個屬性,即輸入字符串(Input string)和匹配類型(Match type),匹配類型在添加條件的對話框中是通過檢查輸字符串是否選項來設置的,總共有3種匹配類型,細分的話則是6種匹配類型:
1、是否是文件,分為是文件和不是文件這兩個選項,可以用來判斷所請求的URL是否為系統文件的物理路徑,默認的條件輸入字符串的值(服務器變量)是{REQUEST_FILENAME}
2、是否是目錄,分為是目錄和不是目錄這兩個選項,可以用來判斷所請求的URL是否為文件目錄的物理路徑,默認服務器變量為{REQUEST_FILENAME}
3、是否與模式匹配,分為與模式匹配和與模式不匹配兩個選項,一旦選擇了這種匹配模式,那么就需要搭配正則表達式或者通配符進行匹配。在添加條件的對話框中,通過設置模式輸入框來設置相應的正則表達式或通配符以完成模式匹配。
條件輸入字符串與服務器變量
條件輸入字符串中的值就是服務器變量,而具體使用哪些服務器變量則與匹配類型有關,關于服務器變量可以查閱這篇資料:IIS Server Variables
這里我們挑選最常使用的匹配類型:與模式匹配。這種模式最常使用的服務器變量類型如下:QUERY_STRING、HTTP_HOST、SERVER_PORT、SERVER_PORT_SECURE、REQUEST_URI。
假設向下面的URL地址發送一個請求:http://shiyousan.com/Home/Index?page=1&tid=11,那么這些變量的含義如下:
QUERY_STRING 服務器變量所包含的是 page=1&tid=11這部分,表示URL的參數字符串HTTP_HOST 服務器變量所包含的部分是shiyousan.com,表示所請求的主機域名SERVER_PORT 服務器變量所包含的部分是 80,表示服務器的端口SERVER_PORT_SECURE 服務器變量所包含的部分是0,HTTPS請求為OFF,表示接受請求的服務器端口是否為安全端口時,是為1,否則為0,一般來說如果是HTTPS請求則為安全端口,即為1,HTTPS為ON。REQUEST_URI 服務器變量所包含的部分是/Home/Index?page=1&tid=11,就是除了主機域名外剩下的URL地址字符串和參數字符串。范例
根據上面條件輸入的服務器變量類型描述,就能大概知道這些服務器變量如何和我們的匹配模式相結合使用,這里我們以正則搭配HTTP_HOST來做一個范例。
假設當前網站綁定了多個域名,比如shiyousan.com,www.shiyousan.com,daodaodao.shiyousan.com,ywftest.com(意思就是訪問這些域名都是打開同一個網站)。我們要做一個301重定向,將shiyousan.com這個頂級域名下的所有子域名都重定向到頂級域名中(這里只是舉例,一般很少這樣做),其他頂級域名保持不變。
如下圖所示,我們添加了一個條件模式,條件輸入的服務器變量為{HTTP_HOST},匹配模式的正則為^(.+)/.shiyousan/.com$。
只要在網站中輸入www.shiyousan.com這樣主機為shiyousan且帶有多級域名前綴,都會被強制跳轉到頂級域名中。
相反的由于在條件模式中沒有限制ywftest.com這個域名,所以使用這個域名訪問網站就會發現URL地址仍然沒有變化。因為ywftest.com的主機無法和我們設置的條件正則匹配,所以就不會觸發對應的入站規則。如果想將ywftest.com這個域名也實現上述的重定向功能,我們也只要在添加一條規則添加即可,并設置邏輯分組為任意匹配。
其他的服務器變量也是這樣的道理,比如添加一個QUERY_STRING的條件模式,那么只有請求的URL地址和所設置的URL參數正則匹配,才能觸發重寫工具所定義的規則。
新聞熱點
疑難解答
圖片精選