匯入 Apache mod_rewrite 規則
簡介
IIS 7 和更新版本的 URL 重寫模組提供匯入功能,可大幅簡化將 Apache mod_rewrite 規則轉換成 IIS URL 重寫規則的程式。 在本逐步解說中,您會使用URL重寫模組中提供的匯入規則功能,將數個mod_rewrite規則匯入 IIS 組態檔。 如果您尚未下載 URL 重寫模組,您可以在 執行此 https://www.iis.net/downloads/microsoft/url-rewrite動作。
設定逐步解說案例
若要查看如何轉換mod_rewrite規則,並確認轉換的規則正常運作,您將實作強制執行網站標準主機名的常見案例。 在此範例中,您將強制使用 www.mysite.com
而非 mysite.com
,以便在提出使用 以外的 www.mysite.com
主機名的要求時,您可以將要求重新導向至標準主機名。
啟動 IIS 管理員,然後按兩下 [ 預設網站]。
在 [動作] 窗格中,按兩下 [系結],然後為埠 8088 新增 HTTP 系結。
圖 1:新增系結
使用 記事本,在檔案結尾開啟
%SystemDrive%\windows\system32\drivers\etc\hosts
並新增下列兩行:127.0.0.1 www_mysite_com 127.0.0.1 mysite_com
請注意,您針對網域分隔符使用 “_” 而不是 “.”。 這是為了避免網頁瀏覽器嘗試使用域名系統 (DNS) 伺服器解析功能變數名稱。
儲存主機檔案。
開啟網頁瀏覽器並前往網站
http://www_mysite_com/iisstart.htm
並移至 ,並移至http://mysite_com/iisstart.htm
,以確認主機名已正確設定。
轉換mod_rewrite規則
用來強制執行標準主機名的 Apache mod_rewrite規則如下:
#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST} !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]
#And for a site running on port 80
RewriteCond %{HTTP_HOST} !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www_mysite_com/$1 [L,R]
若要將這些規則轉換成 IIS URL 重寫特定格式:
啟動 IIS 管理員。
在左側的 [連線 ions] 窗格中,選取 [默認網站]。
在右側的 [ 功能檢視] 中,按兩下 [ URL 重寫]。
圖 2:按兩下 [URL 重寫]
在右側的 [動作] 窗格中,按兩下 [ 匯入規則]。
複製上述mod_rewrite規則範例,並將其貼到 [重寫規則 ] 文本框中。
圖 3:匯入的規則
[已轉換規則] 方塊的 [樹視圖] 索引標籤會立即顯示轉換的結果。 您也可以按兩下 [XML 檢視] 索引標籤,以查看規則如何儲存在 Web.config 檔案中。
圖 4:已轉換的規則
如果您切換回樹視圖並選取該處的節點,則會反白顯示 [重寫規則] 文本框中對應的mod_rewrite規則指示詞。
圖 5:樹視圖
請注意,在規則轉換期間,規則已指派預設名稱。 若要將預設名稱變更為更有意義的名稱,請在 [樹視圖] 中選取規則,以滑鼠右鍵按兩下它,然後從操作功能表中選取 [重新命名]。
圖 6:重新命名
將第一個規則的名稱從 ImportedRule1 變更為 [重新導向] 以www_mysite_com:non-80。 將第二個規則的名稱從 ImportedRule2 變更為 [重新導向] 以www_mysite_com:80。
在 [ 動作] 窗格中,按兩下 [套 用] 將轉換的規則儲存至 Web.config 檔案,然後按兩下 [ 返回規則]。
圖 7:回到規則
測試已轉換的規則
若要測試從 mod_rewrite 格式匯入的規則正常運作,請開啟網頁瀏覽器,然後移至下列其中一個 URL:
http://localhost/iisstart.htm
http://mysite_com/iisstart.htm
在這兩種情況下,網頁瀏覽器都會重新導向至 http://www_mysite_com/iisstart.htm
。
此外,如果您嘗試下列其中一個URL:
http://localhost:8088/iisstart.htm
http://mysite_com:8088/iisstart.htm
網頁瀏覽器會重新導向至 http://www_mysite_com:8088/iisstart.htm
。
請注意,從 mod_rewrite匯入的規則可強制執行網站的標準主機名。 Bing 搜尋會顯示 Apache mod_rewrite規則的其他範例。
免責聲明
重要 - URL 重寫模組會嘗試將 Apache mod_rewrite 規則轉換為功能上對等的 IIS URL 重寫規則。 不過,並非所有mod_rewrite規則都可以轉換,因為 Apache 和 IIS 之間的架構差異。 強烈建議您研究mod_rewrite規則集,直到您在開始轉換程式之前先瞭解其功能。 然後,在轉換成 IIS URL 重寫規則之後,檢閱並測試結果進行轉換,以確保對應的 IIS 重寫規則集提供相同的 URL 重寫邏輯。
請注意,只有遵循Apache mod_rewrite語法的規則才能轉換。 無法辨識任何其他格式的重寫規則(例如,ISAPI_Rewrite、仿生 ISAPI 重寫、IISRewrite 和其他格式)無法辨識或轉換不正確。