共用方式為


使用輸出規則新增 Web Analytics 追蹤程式代碼

Ruslan Yakushev

本檔章節適用於 IIS 7 的 URL Rewrite Module 2.0 版。

本逐步解說將引導您建立 IIS 輸出重寫規則,以將 Web 分析追蹤文本插入網頁。

必要條件

若要執行此逐步解說,您必須具備下列專案:

  1. 已安裝 URL Rewrite Module 2.0 RCrelease。

簡介

Web 分析服務的目的是為網站發行者提供有關其網站訪客的統計數據。 此資訊可協助網站發行者優化內容、廣告和服務供應專案,以提高客戶滿意度和 ROI。 一般而言,透過收集網站訪客的相關數據,在線Web分析服務,例如Google Analytics或 Omniture 工作。 當網站擁有者要求報告時,Web 分析提供者會處理此數據,並以方便且容易理解的格式呈現給網站擁有者。 若要啟用分析所需的數據收集,網站擁有者必須使用 Web 分析服務提供者發出的追蹤腳本檢測網站上的所有頁面

在某些情況下,將追蹤程序代碼新增至網頁是簡單的工作。 不過,在許多情況下,可能需要手動將腳本新增至許多網頁。 在這些情況下,Web 分析檢測會變成昂貴且耗時的工作。 URL 重寫模組第 2 版中的回應重寫功能,可藉由執行即時變更回應內容的輸出規則,來協助這些情況。

建立輸出重寫規則

首先,您將建立輸出重寫規則,將 JavaScript 代碼段新增至 HTML 回應。 代碼段會緊接在結尾 </body> 標記之前插入,如下圖所示

... 
    <script type='text/javascript'>
        //Your web analytics tracking code goes here...
    </script>
</body>

H T M L Web 分析追蹤程式代碼和顯示 HtmlEncode 函式的 X M L 程式代碼範例。警告:在此特定範例中,會假設 JavaScript 程式代碼來自受信任的來源,而且應該如往下插入 HTML 頁面。 在許多其他情況下,當響應標頭或響應內容由輸出重寫規則修改時,應該特別小心,以確保插入回應中的文字不包含任何用戶端可執行程序代碼,這可能會導致跨網站腳本弱點。 當重寫規則使用不受信任的數據,例如 HTTP 標頭或查詢字串,來建置要插入 HTTP 回應的字串時,這特別重要。 在這種情況下,取代字串應該使用 HtmlEncode 函式進行 HTML 編碼,例如:

<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />

若要建立輸出規則:

  1. 開啟 IIS 管理員
  2. 選取 [預設網站]
  3. 在 [功能檢視] 中,選取 [URL 重寫模組]
    [I S 管理員] 視窗功能檢視的螢幕快照,其中已選取 [U R L 重寫]。
  4. 在右側的 [動作] 窗格中,按兩下 [新增規則...]。 在 [新增規則] 對話框中,選取 [輸出規則] 類別下的 [空白規則],然後按兩下 [確定]。
    [新增規則] 對話框的螢幕快照,其中已選取 [輸出規則] 底下的 [空白規則]。

現在您必須定義實際的輸出規則。 在 URL Rewrite Module 2.0 中,輸出重寫規則是藉由指定下列資訊來定義:

  • 規則的名稱。
  • 選擇性前置條件,可控制此規則是否應套用至回應。
  • 要用於比對回應中字串的模式。
  • 選擇性的一組條件。
  • 如果符合模式,且所有條件檢查都成功,則為要執行的動作。

為規則命名

在 [名稱] 文本框中,輸入將唯一識別規則的名稱,例如:“新增追蹤腳本”。

定義前置條件

前置條件可用來評估輸出規則評估是否應在回應上執行。 例如,如果修改 HTML 內容的規則,則應該針對此規則評估只有內容類型標頭設定為 「text/html」 的 HTTP 回應。 輸出規則評估和內容重寫是CPU密集作業,可能會對 Web 應用程式的效能造成負面影響。 因此,使用前置條件來縮小套用輸出規則時的案例範圍。

因為您要建立的規則應該只在 HTML 回應上套用,因此您將定義前置條件,以檢查 HTTP 回應標頭 內容類型 是否等於 「text/html」。。

若要定義前置條件:

  1. 在 [預先條件] 清單中,選取 [<建立新的預先條件...>]。

  2. 這會帶您前往 [條件前編輯器] 對話框,您必須在其中定義前置條件。 指定前置條件設定,如下所示:

    • 名稱:“IsHTML

    • 使用:“正則表達式

    • 按兩下 [新增] 以顯示 [新增條件] 對話框。 在這裡對話框中,指定:

      • 條件輸入:“{RESPONSE_CONTENT_TYPE}

      • 檢查輸入字串:「符合模式

      • 模式:“^text/html

        [新增條件前置條件編輯器] 對話框的螢幕快照,其中包含設定。

  3. 單擊 [確定] 以儲存前置條件,並返回 [編輯規則] 頁面。

定義相符的範圍

輸出重寫規則可以在 HTTP 標頭的內容或回應本文內容上運作。 此規則需要修改響應內容,因此在 [比對範圍] 下拉式清單中,選擇 [回應]。

定義模式

在 [Using:] 下拉式清單中,選擇 [完全相符] 選項。

在 [模式] 文字框中,輸入下列字串:

</body>

定義動作

選擇 [動作] 群組方塊中所列的 [重寫] 動作類型。 在 [值] 文字框中,輸入下列字串:

<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>

此字串會指定新的值,該值將做為回應內相符字串的取代專案。 在此情況下,字串 「</body>」 將會取代為 JavaScript 代碼段,後面接著結尾 HTML 本文標記。

保留所有其他設定的預設值。 [編輯規則] 屬性頁看起來應該像下列頁面:

[編輯輸出規則] 屬性頁的螢幕快照,其中已選取設定。

按下右側的 [套用] 動作,以儲存規則。

在組態檔中檢視重寫規則

重寫規則會儲存在aplicationHost.config檔案或web.config檔案中。 若要檢查我們剛才建立的規則組態,請開啟位於 中的 %SystemDrive%\inetput\wwwroot\web.config 檔案。 在此檔案中,您應該會看到 <rewrite> 包含所有規則定義的區段:

<rewrite>
 <outboundRules>
  <rule name="Add tracking script" patternSyntax="ExactMatch" preCondition="">
   <match filterByTags="None" pattern="&lt;/body>" />
   <action type="Rewrite" value="&lt;script type='text/javascript'>//Your web analytics tracking code goes here...&lt;/script>&lt;/body>" />
  </rule>
 <preConditions>
  <preCondition name="IsHTML">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
  </preCondition>
 </preConditions>
</outboundRules>
</rewrite>

測試規則

若要測試規則是否正確將 JavaScript 程式代碼新增至網頁,請要求此 URL http://localhost/iisstart.htm

一旦您從伺服器取得回應,請開啟實際的 HTML 原始程式碼(如果使用 Internet Explorer 8,請移至 [頁面-> 檢視來源]。 回應 HTML 會在結尾 HTML 本文標記之前包含 JavaScript 程式代碼:

[I I S 7] 視窗的螢幕快照,其中顯示 JavaScript 程式代碼的記事本。

摘要

在本逐步解說中,您已瞭解如何在 URL 重寫模組第 2 版中使用輸出規則,以即時修改 HTTP 回應的內容。 當您需要對 Web 應用程式所產生的 HTTP 回應執行次要修改,但您沒有應用程式的控制權,或對應用程式進行大規模變更並不實用時,這項功能非常有用。