共用方式為


匯入 Apache mod_rewrite 規則

Ruslan Yakushev

簡介

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主機名的要求時,您可以將要求重新導向至標準主機名。

  1. 啟動 IIS 管理員,然後按兩下 [ 預設網站]。

  2. 在 [動作] 窗格中,按兩下 [系結],然後為埠 8088 新增 HTTP 系結

    按兩下 [動作] 窗格中 [編輯網站] 底下的 [系結] 後,[網站系結] 對話框的螢幕快照。圖 1:新增系結

  3. 使用 記事本,在檔案結尾開啟%SystemDrive%\windows\system32\drivers\etc\hosts並新增下列兩行:

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    請注意,您針對網域分隔符使用 “_” 而不是 “.”。 這是為了避免網頁瀏覽器嘗試使用域名系統 (DNS) 伺服器解析功能變數名稱。

  4. 儲存主機檔案。

  5. 開啟網頁瀏覽器並前往網站 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 重寫特定格式:

  1. 啟動 IIS 管理員

  2. 在左側的 [連線 ions] 窗格中,選取 [默認網站]。

  3. 在右側的 [ 功能檢視] 中,按兩下 [ URL 重寫]。

    [默認網站首頁] 窗格的螢幕快照,其中已選取 [U R L 重寫]。

    圖 2:按兩下 [URL 重寫]

  4. 在右側的 [動作] 窗格中,按兩下 [ 匯入規則]。

  5. 複製上述mod_rewrite規則範例,並將其貼到 [重寫規則 ] 文本框中。

    [匯入強制回應底線重寫規則] 窗格的螢幕快照,其中包含一組重寫規則和一組成功轉換的規則。

    圖 3:匯入的規則

  6. [已轉換規則] 方塊的 [樹視圖] 索引標籤會立即顯示轉換的結果。 您也可以按兩下 [XML 檢視] 索引標籤,以查看規則如何儲存在 Web.config 檔案中。

    在 [已轉換的規則] 區段中切換樹視圖與 X M L 檢視之間的螢幕快照。

    圖 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 和其他格式)無法辨識或轉換不正確。