IIS 的 URL Rewrite 使用: 規則運算式


假設請求網址為 http://www.domain.com.tw/dir/search.aspx?user=sean

這算是自己的筆記吧! IIS 的 URL Rewrite 很好用,但想設定的人可能一頭霧水。Regular Expression 的 Pattern 是要從 http:// 開始、或是 www. 開始、或是 /dir 或 dir 都沒有說明, 每次都會忘記,所以自己做個筆記。址尾是否包含 Query String 也沒說明。


結論:

● 「模式:」填寫 Regular Expression Pattern,此例「^dir/search\.aspx$」是符合的。

● 「重寫 URL:」用 {R:1} ~ 9 當回溯值(Back-reference; 也就是 RegExp 中的括弧順序)。

● 勾「附加查詢字串」會把「?user=sean」加到「重寫 URL」尾端。

讓 YUI DataTable 使用 JSON Data Over XHR 時支援中文 field

原由

YUI 真是個好東西,最近拿它來寫公司的程式。
天殺的! 不知以前是誰把資料庫欄位都用中文命名。
我輸出 JSON 長這樣...


{
 "ResultSet": {
  "Result": [{
   "ID": "1234",
   "姓名": "林洵賢",
   "電話": "1234567890"

... 省略

話說當今瀏覽器 UTF8 編碼的頁面 JavaScript 運作起來是沒什麼問題。
但 YUI 是外國人設計的,用它的 DataSource 抓資料後認為這些以中文為 key 的是壞東西會自動被忽略。


解決

追程式囉! 我原本是用 DataTable 當然從它開始追,追到另一個模組 DataSource 找到了!
我用的是 YUI 2.9 版,修改 \build\datasource\datasource*.js 原始程式,把

[^\w\.\$@]

改成

[^\w\.\$@\u4e00-\u9fa5]

就支援中文 key 了。


或許這篇算是寫給自己的筆記,沒接觸過的應該看沒有。
如果你不幸也在找同樣的解決方案 google 到我,那恭喜你囉,留個言吧!


後記
後來發現欄位排序中文Key也有問題,要修改 datatable*.js 尋找 [^\w\-] 改為 [^\w\-\u4e00-\u9fa5] 即可。

IIS 7.5 Express 多重網站

IIS 7.5 Express 支援多重網站嗎? 官方是不支援這樣的設定的。

微軟出的 IIS 7.5 Express 可以讓舊電腦(XP)安裝最新的IIS版本。想把 XP 內建的 IIS 換成 IIS Express 要有些心理準備。它沒有完整的 GUI 設定介面,所有設定都要用文字編輯器修改設定檔。啟動或停止網站服務也都要用命令列指令來完成。不過裝了它可以讓 XP 擁有如同伺服器最新 IIS 版本的所有功能。

還有個缺點,一次只能只能啟動一個網站,即使設了多個也是只能選其中一個來啟動。畢竟它是設計來當開發用的測試環境。還好 IIS Express 內建 URL Rewrite 模組。有了 URL Rewrite 透過一些小技巧就可以把不同目錄模疑成支援多網站的IIS了。

假設有兩個網域 www.aaa.com 及 www.bbb.com 的 IP 都指到這台電腦。如果想讓

  • 連到 http://www.aaa.com/ 連到網站根目錄下的 /www.aaa.com/
  • 連到 http://www.bbb.com/ 連到網站根目錄下的  /www.bbb.com/


可以透過修改網站 web.config 檔 (沒有的話自行建立放置於網站根目錄)
加入 URL Rewrite 的設定如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rewriteMaps>
                <rewriteMap name="site1" />
            </rewriteMaps>
            <rules>
                <rule name="CanonicalHostNameRule1" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTP_HOST}" pattern="^(.+)$" />
                    </conditions>
                    <action type="Rewrite" url="{C:1}/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

如此一來感覺就像同時啟動兩個虛疑網站囉!

有關 IIS Express 的安裝使用就請客位看官請自行 Google 一下吧!