共用方式為


使用失敗的要求追蹤來追蹤重寫規則

作者: Ruslan Yakushev

IIS 7.0 和更新版本失敗的要求追蹤 (FRT) 是針對要求處理失敗進行疑難解答的強大工具。 FRT 可以與 URL 重寫模組搭配使用,以追蹤重寫規則如何套用至要求 URL。 本逐步解說將引導您瞭解如何使用FRT對URL重寫規則進行疑難解答和偵錯。 如需失敗要求追蹤的詳細資訊,請參閱本文

必要條件

本逐步解說需要下列必要條件:

  1. 已啟用 ASP.NET 和「追蹤」角色服務的 IIS 7.0 或更新版本
  2. 已安裝 URL 重寫 Go Live 版本

設定測試網頁

為了示範 URL 重寫模組的運作方式,我們將使用簡單的測試 ASP.NET 頁面。 此頁面會讀取 Web 伺服器變數,並在瀏覽器中輸出其值。

複製下列 ASP.NET 程式代碼,並將它 %SystemDrive%\inetpub\wwwroot\ 放在名為 article.aspx 的檔案資料夾中:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>

複製此檔案之後,請流覽至 http://localhost/article.aspx ,並檢查頁面是否已在瀏覽器中正確轉譯。

透過網頁瀏覽器存取文章頁面的螢幕擷取畫面。

設定重寫規則

找出資料夾中的 web.config 檔案 %SystemDrive%\inetpub\wwwroot\ ,如果檔案不存在,請建立檔案。 開啟 web.config 檔案,並在 元素內 <system.webServer> 新增下列區段:

<rewrite>
      <rules>
        <rule name="Fail bad requests">
          <match url="." />
          <conditions>
            <add input="{HTTP_HOST}" negate="true" pattern="localhost" />
          </conditions>
          <action type="AbortRequest" />
        </rule>
        <rule name="Rewrite to article.aspx">
          <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
          <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
        </rule>
      </rules>
</rewrite>
  • 如果 HTTP 要求的主機標頭不符合 「localhost」,「失敗要求」規則會中止 HTTP 連線
  • 「重寫為 article.aspx」規則會將此格式的 URL 重寫為這個格式http://localhost/article/234/some-titlehttp://localhost/article.aspx?id=234&title=some-title

開啟瀏覽器並提出對 http://localhost/article/234/some-title的要求,檢查規則是否已正確設定。 如果規則已正確設定,您應該會在瀏覽器中看到下列回應:

顯示原始 U R L 和重寫版本的 U R L 重寫模組測試頁面螢幕擷取畫面。

設定失敗的要求追蹤

現在啟用「默認網站」的失敗要求追蹤 (請參閱本文的,以取得如何啟用FRT) 的逐步指示。 啟用失敗的要求追蹤之後,我們會建立FRT規則來追蹤URL重寫模組特有的事件。

若要在 IIS 管理員中建立 FRT 規則,請遵循下列步驟:

  1. 按兩下 [失敗的要求追蹤規則] 圖示,以取得FRT規則的清單。
    [預設網站首頁] 窗格的螢幕擷取畫面,其中已選取 [失敗的要求追蹤規則]。
  2. 按一下 [新增...]顯示 FRT 規則建立精靈的動作。[新增失敗要求追蹤規則] 對話方塊的螢幕擷取畫面,其中已選取 [所有內容])  (星號。
  3. 在精靈的第一頁上,選擇 [所有內容 (*) ]
  4. 按兩下 [下一步],並將狀態代碼 () 指定為 “200-399”
    將狀態碼設定為 200 虛線 399 值的螢幕擷取畫面。
  5. 按 [下一步],然後取消核取 [WWW 服務器] 以外的所有追蹤提供者提供者,然後取消核取 [重寫] 以外的所有提供者區域,但 [只將提供者] 設定為 [W W 伺服器] 和 [區域] 設定為 [重寫] 的螢幕擷取畫面。
  6. 按兩下 [完成] 以儲存FRT規則。

如果在 URL 重寫模組之後安裝失敗的要求追蹤,追蹤提供者中的「重寫」區域可能無法使用。 如果您沒有在該處看到 [重寫] 區域,請移至 [新增/移除程式],然後在修復模式中執行 URL 重寫模組安裝程式。

分析失敗的要求追蹤記錄檔

建立FRT規則之後,請向 http://localhost/article/234/some-title提出要求。 這會在 中 %SystemDrive%\inetpub\Logs\FailedReqLogFiles\建立FRT記錄檔。 您可以使用 Internet Explorer 開啟此記錄檔,並將它轉譯為可輕鬆流覽的 HTML 檔。 以下是可在追蹤記錄檔中找到的 URL 重寫特定事件的範例:

使用網頁瀏覽器存取 F R T 記錄檔的螢幕擷取畫面。記錄檔會顯示重寫規則及其重寫邏輯的清單。

這些事件顯示重寫規則的評估方式,以及重寫模組如何修改要求的URL。 讓我們逐步解說一些事件,以進一步瞭解規則評估邏輯:

URL_REWRITE_START - 此事件表示 URL 重寫事件的開頭。 事件屬性提供下列資訊:

  • 輸入 URL 字串為 “/article/234/some-title”。
  • 沒有查詢字串。
  • Scope=“Distributed” 表示規則是本機 (,也就是在月臺) Web.config 中定義規則,而不是在伺服器層級) 上定義的全域 (。

RULE_EVALUATION_START - 此事件指出規則評估邏輯的開頭。 事件屬性提供下列資訊:

  • 規則會針對模式語法使用正則表達式 (patternSyntax=“ECMAScript”)
  • (StopProcessing = “false”) 評估後續規則
  • 規則定義於月臺根層級上, (RelativePath = “/”)

PATTERN_MATCH - 此事件提供 URL 與規則模式的比對方式的相關信息。 事件屬性提供下列資訊:

  • 規則模式為 “.” (即符合任何字元)
  • 輸入 URL 已成功比對模式

CONDITIONS_EVALUATION_START - 因為輸入 URL 符合條件評估開始的模式

CONDITION_EVALUATION - 此事件提供下列資訊:

  • HTTP_HOST的值是 「localhost」,且符合模式
  • 因為條件否定是在規則 (中指定,也就是 Negated=“true”) 條件評估未成功。

CONDITIONS_EVALUATION_END - 此事件顯示此規則的條件評估未成功

RULE_EVALUATION_END - 此事件顯示規則未修改 URL (Succeeded=“false”) 。 這是因為規則條件評估失敗。

RULE_EVALUATION_START - 這甚至會顯示 URL 字串已傳遞至第二個規則

PATTERN_MATCH - 此事件提供 URL 與規則模式的比對方式的相關信息。 事件屬性告訴我們:

  • 規則模式為:「^article/ ([0-9]+) / ([0-9a-z]+) ”
  • 輸入 URL 已成功比對模式

REWRITE_ACTION - 此事件指出規則評估成功,且 URL 已以查詢字串 “id=234&title=some-title” 重寫為 “/article.aspx”

總結

FRT 所記錄的 URL 重寫特定事件提供非常詳細的資訊,可用於對 URL 重寫規則進行疑難解答和偵錯,以及了解規則評估邏輯如何套用至 URL 字串。