使用失敗的要求追蹤來追蹤重寫規則
作者: Ruslan Yakushev
IIS 7.0 和更新版本失敗的要求追蹤 (FRT) 是針對要求處理失敗進行疑難解答的強大工具。 FRT 可以與 URL 重寫模組搭配使用,以追蹤重寫規則如何套用至要求 URL。 本逐步解說將引導您瞭解如何使用FRT對URL重寫規則進行疑難解答和偵錯。 如需失敗要求追蹤的詳細資訊,請參閱本文。
必要條件
本逐步解說需要下列必要條件:
- 已啟用 ASP.NET 和「追蹤」角色服務的 IIS 7.0 或更新版本
- 已安裝 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}&title={R:2}" />
</rule>
</rules>
</rewrite>
- 如果 HTTP 要求的主機標頭不符合 「localhost」,「失敗要求」規則會中止 HTTP 連線
- 「重寫為 article.aspx」規則會將此格式的 URL 重寫為這個格式
http://localhost/article/234/some-title
http://localhost/article.aspx?id=234&title=some-title
。
開啟瀏覽器並提出對 http://localhost/article/234/some-title
的要求,檢查規則是否已正確設定。 如果規則已正確設定,您應該會在瀏覽器中看到下列回應:
設定失敗的要求追蹤
現在啟用「默認網站」的失敗要求追蹤 (請參閱本文的,以取得如何啟用FRT) 的逐步指示。 啟用失敗的要求追蹤之後,我們會建立FRT規則來追蹤URL重寫模組特有的事件。
若要在 IIS 管理員中建立 FRT 規則,請遵循下列步驟:
- 按兩下 [失敗的要求追蹤規則] 圖示,以取得FRT規則的清單。
- 按一下 [新增...]顯示 FRT 規則建立精靈的動作。
- 在精靈的第一頁上,選擇 [所有內容 (*) ]
- 按兩下 [下一步],並將狀態代碼 () 指定為 “200-399”
- 按 [下一步],然後取消核取 [WWW 服務器] 以外的所有追蹤提供者提供者,然後取消核取 [重寫] 以外的所有提供者區域
- 按兩下 [完成] 以儲存FRT規則。
如果在 URL 重寫模組之後安裝失敗的要求追蹤,追蹤提供者中的「重寫」區域可能無法使用。 如果您沒有在該處看到 [重寫] 區域,請移至 [新增/移除程式],然後在修復模式中執行 URL 重寫模組安裝程式。
分析失敗的要求追蹤記錄檔
建立FRT規則之後,請向 http://localhost/article/234/some-title
提出要求。 這會在 中 %SystemDrive%\inetpub\Logs\FailedReqLogFiles\
建立FRT記錄檔。 您可以使用 Internet Explorer 開啟此記錄檔,並將它轉譯為可輕鬆流覽的 HTML 檔。 以下是可在追蹤記錄檔中找到的 URL 重寫特定事件的範例:
這些事件顯示重寫規則的評估方式,以及重寫模組如何修改要求的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 字串。