2012年3月5日 星期一

簡易的 Url Rewriting 隱藏 Querystring

常常有些人會問如何隱藏 Querystring,原因是 Querystring 裡面包含一些參數不想被使用者知道。以下文章就介紹如何使用 UrlRewriter.NET  套件,來幫助我們實現 Url Rewriting 將 Querystring  隱藏起來。
SNAG-0000
(點擊 Download 圖示)
SNAG-0001
(點擊 binaries and source code 連結至 SourceForge 網站準備下載)
SNAG-0002
(下載 urlrewiternet20rc1b6.zip 最新版本)
  • 下載 urlrewiternet20rc1b6.zip 後,將 UrlRewriterV2\bin\Release\Intelligencia.UrlRewriter.dll 加入參考
  • 設定 Web.config 檔案
</configuration>
<configSections>
<section name="rewriter" 
requirePermission="false" 
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
 
<system.web>
<httpModules>
<add name="UrlRewriter" 
type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
</system.web>
 
<rewriter>
<rewrite url="~/Books/(\d+)/Default.aspx" to="~/Books.aspx?bookID=$1"/>
</rewriter>
 
</configuration>

其中比較注意的是 <rewriter> 區塊的部分,url 表示來源網址,to 表示目的網址。舉例來說,你的網址是 Books/1234/Default.aspx 時,UrlRewiter 就幫你 Url 轉向 Books.aspx?bookID=1234。其中 (\d+) 是一種 Regular Expression(Regex)的表示方法,表示由 0-9 組合而成的字串組合,$1 則代表 url 符合 Regex 的字串變數。當你有多組 Regex,則就會有 $1、$2、$3...以此類推。以下我們實地操作,看看如何應用:
  • 撰寫 Default.aspx 程式碼,主要是提供介面建立連結,如下,:
   1:  <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml">
   6:  <head runat="server">
   7:      <title>Untitled Page</title>
   8:  </head>
   9:  <body>
  10:      <form id="form1" runat="server">
  11:      <div>
  12:          <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  13:          <asp:Button ID="Button1" runat="server" Text="查詢" onclick="Button1_Click" />
  14:      </div>
  15:      </form>
  16:  </body>
  17:  </html>
畫面:
SNAG-0003
  • 撰寫 Default.aspx.cs 程式碼,主要目的是收集使用者輸入的查詢條件,將條件傳向 Books.aspx 頁面,如下:
   1:  using System;
   2:  using System.Web.UI;
   3:   
   4:  public partial class _Default : Page
   5:  {
   6:      protected void Page_Load(object sender, EventArgs e)
   7:      {    
   8:      }
   9:   
  10:      protected void Button1_Click(object sender, EventArgs e)
  11:      {
  12:          string url = string.Format("~/Books/{0}/Default.aspx", TextBox1.Text);
  13:          Response.Redirect(url);
  14:      }
  15:  }

  • 撰寫 Books.aspx.cs,將收到的 Querystring 在畫面上印出,程式碼如下:
   1:  using System;
   2:  using System.Web.UI;
   3:   
   4:  public partial class Books : Page
   5:  {
   6:      protected void Page_Load(object sender, EventArgs e)
   7:      {
   8:          if (string.IsNullOrEmpty(Request["bookID"]) == false)
   9:          {
  10:              string msg = string.Format("書籍編號: {0}", Request["bookID"]);
  11:              Response.Write(msg);
  12:          }
  13:      }
  14:  }
結果畫面如下:
SNAG-0004

沒有留言:

張貼留言