iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
自我挑戰組

30天 IIS 面面觀系列 第 21

Day21. 面目全非腳,還我漂漂拳 - URL Rewrite

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221006/20142057huniA4e8Vi.jpg
可能完賽我回再重新把文章都過一次(現在每天都在努力擠內容已經沒什麼時間啦?,有在追內容的讀者應該都看的出來我每篇都是誠意滿滿,訂閱一下啦),讓整篇讀起來更通順,還有最重要的,每篇都加上一張成功的封面圖(欸不是)。

今天要聊的這個模組功能運用範圍挺廣泛的,據我所知目前為止都還是要另外下載安裝 ─ URL Rewrite。他的功能也就跟他的名字一樣直白,能夠依據特定條件對 URL 進行覆寫,改完之後的 URL 就像中了面目全非腳,啊,應該說是還我漂漂拳,變成你想要的樣子啦。因為條件應對靈活、能夠處理絕大多數跟 URL 有關的情況,算是非預設安裝但相當常被使用的模組。

URL rewrite 的好處是什麼呢?你能夠做到把 http://www.this.is.your.website/and/very/long/url?and=some&query=string 縮寫成 http://your.website/longurl 。縮短以外,也能讓網址更方便記憶,甚至能影響網站的 SEO 排名、隱藏一些資訊避免惡意攻擊,對整體網站設定來說是個重要的步驟。

既然要安裝,這裡分享一下安裝的步驟,首先進入官方載點 URL Rewrite,下載完會是一個 exe,沒有什麼特別要注意的,就是一直下一步到裝完囉。

裝完後重開一次 IIS Manager 就會看到囉。

https://ithelp.ithome.com.tw/upload/images/20221006/201420578yEgpw56Bk.png

點進來長得像這樣,可以看到下圖介面,上方屬 Inbound,下方屬 Outbound,這裡的 In / Out 是相對 Request 對 IIS 而言。Inbound 指的是 Request 到 IIS 這段,如 URL 的對應轉換;Outbound 指的是 IIS 回去的 Respnse,多用於 Header調整。

https://ithelp.ithome.com.tw/upload/images/20221006/20142057hDUAEiLYrL.png

https://ithelp.ithome.com.tw/upload/images/20221006/20142057oVE64vAlTp.png

在新增規則的頁面,可以明確看到被區分為四類,我們會快速介紹一下這些 Rule Template 的目的。

Inbound rules

  • Blank rule : 基本上所有 Inbound 類的規則都能用這個設定出來,預設為空白的規則內容,給充滿想像力的你(咦)
  • Rule with rewrite map : 能夠定義各種情況,讓在群組中的情況通通由這個處理,並依制定的 Rewrite 規則對符合情況的 Request URL 做改寫
  • Request blocking : 依情況對 Request 做阻擋行為,能夠自訂阻擋行為如 403、 404等,也能自己撰寫錯誤訊息與 sub status code

Inbound and Outbound Rules : 這塊地設定會兼具 Inbound 和 Outbound 的設定可能

  • User-friendly URL : 讓使用者拿到比較友善的網址(Outbound),或讓使用者輸入比較友善的網址(Inbound),並做對應 mapping
  • Reverse Proxy : 需要配合 ARR 套件的安裝,Proxy 指的是 Request 出去的路徑上中間代為處理的角色,Reverse Proxy 則是指能夠控制進來的 Request 分配,方向相反,所以會說是 Reverse Proxy

Outbound rules

  • Blank rule : 基本上所有 Outbound 類的規則都能用這個設定出來,預設為空白的規則內容,給個性放浪不羈的你(蛤)

Search Engine Optimization (SEO)

  • Enforce lowercase URLs : 讓 URL 裡的文字統一為小寫
  • Canonical domain name : Canonical 指的是典範,就是網頁中的主要 Domain 與路徑,這個概念用於避免重複內容多次被搜尋引擎爬到,讓瀏覽體驗上盡量為主要 Domain 顯示
  • Append or remove the trailing slash symbol : 指的是 URL 的最後面要不要加上 / 的行為,依據進來的 Pattern,是檔案可能要移除 / ,是目錄應該要加上 /,端看使用情境而定

https://ithelp.ithome.com.tw/upload/images/20221006/20142057MnOxhbqCc3.png

簡單帶過各個模板,我們還是看一下空白模板的長相。

收合簡單看的話就是該 Rule 的名稱,要被這個 Rule 處理的 URL (Match URL / Match),更細部定義要作用的情境 (Conditions),對符合條件的 URL 要做的事情 (Action)。

Inbound 多了一個 Server Variables,是透過變數來描述一些特定情況,詳情可參考 IIS Server Variables ,在 Rule 的撰寫會有幫助;Outbound 多了一個 Precondition,用於可以先多寫一層是某該 Rule 要套用到那些情況的 Response(避免非預期的 Response 被調整到,也可以減輕 CPU 層面處理判斷的負擔,如提前先定義不處理 content-type 為 “text/html” 的 Response)。

要做 URL rewrite 的規則撰寫,有個很重要的元素在裡面:Regular Expression,中文叫做正則表達式,或是正規表達式,都有聽過人這樣叫。正則表達式是做什麼用的呢?比如 a 和 z 要被視為同一種情況做處理,正則表達式就會用 [a-z] 來講述小寫字母的情況,其他如數字表達、符號行為定義等等都是正則表達式能做到的範圍。基本上正則表達式你想精通,坊間都已經有整本在寫正則表達式該怎麼寫的書,內容基本不是我這邊講得完的。如果你今天第一次看到這個詞,可以去查一下,簡單的了解幾條比較簡單的規則,如 \n \W,對你日常的文字編輯相關也有幫助,現代的文字編輯器基本都有透過正則表達式做取代的功能,處理大量重複作業的時候這個能省去非常多時間。這邊分享一篇以前我寫過關於正則表達式其中一小塊的知識分享,有興趣也可以讀讀 【Regex】用正規表達式取代時保留部分內容不被替換

實際上會運用到 URL 的情境很多,上面沒辦法包山包海講全部,你只要知道要對 URL 做操作、Header 調整的時候,能夠找這個模組幫幫忙就行了。網路上很多人寫好的 Rule 可以做參考,如 Http 轉 Https,汰換舊目錄路徑之類的。關鍵字下 URL rewrite example 加上你的情境,就會有各種先人留下的資訊可以參考,希望透過這篇讓你對這個模組有個基本認識,知道當你有需求的時候,能夠來找這個模組。


上一篇
Day20. 請拿出你的身分識別卡 - Authorization Rules, IP Address and Domain Restrictions
下一篇
Day22. 證書通常都很重要,就像畢業證書 - Server Certificates, SSL Settings
系列文
30天 IIS 面面觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言