Home > ASP.NET With C#, Lập Trình > Asp.net Url Rewrite hướng dẫn Rewrite Url không cần cấu hình IIS

Asp.net Url Rewrite hướng dẫn Rewrite Url không cần cấu hình IIS

Bạn có liên kết dạng http://mysite/Post.aspx?ParentID=123&CateID=234&NewID=345 giờ bạn muốn Rewrite thành liên kết dạng http://mysite/123/234/345/. Bài viết này tôi sẽ hướng dẫn bạn thực hiện việc Rewrite url như vậy mà không phụ thuộc vào phiên bản IIS và cũng không phải cấu hình gì trong IIS.

Asp.net, Url Rewrite, cấu hình, IIS,

Có nhiều bạn gặp khó khăn khi muốn Rewite Url, trên các diễn đàn vấn đề này cũng được thảo luận rất nhiều. Ngay trêndiễn đàn của hmweb cũng khá sôi nổi về vấn đề này, và cũng đã có rất nhiều bài hướng dẫn về url rewite nhưng đa số các bài đó đều phải cấu hình trong IIS. Tôi đã tìm tài liệu và đã có thể hướng dẫn bạn thực hiện việc này một cách đơn giản.

hmweb_url-rewrite

Bạn cần xây dựng một thư viện để thực hiện việc Rewrite Url. Ở đây đã được Build thành dll rồi, tôi sẽ post liên kết có thể download thư viện này về dùng luôn còn nếu bạn nào muốn tham khảo code project này viết thế nào thì để lại yêu cầu trong diễn đàn tôi sẽ post code. Cách dùng cũng rất đơn giản. Trước tiên bạn download về và add vào thư mục Bin trong website của bạn. Sau đó bạn khai báo và cấu hình trong web.config như sau

1. Trong configSections bạn khai báo như sau:

<configSections>
    <sectionGroup name="modulesSection">
      <section name="rewriteModule" 
               type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
    </sectionGroup>
  </configSections>

2. Trong modulesSection bạn rewrite Url theo mẫu như sau:

<modulesSection>
  <rewriteModule>
    <rewriteOn>true</rewriteOn>
    <rewriteRules>
      <rule source="(\d+)/(\d+)/(\d+)/(.+)/" 
            destination="Post.aspx?ParentID=$1&amp;CateID=$2&amp;NewID=$3&amp;module=$4"/>
      <rule source="(\d+)/(\d+)/(\d+)/" 
            destination="Post.aspx?ParentID=$1&amp;CateID=$2&amp;NewID=$3"/>
      <rule source="(\d+)/(\d+)/" 
            destination="Post.aspx?ParentID=$1&amp;CateID=$2"/>
    </rewriteRules>
  </rewriteModule>
</modulesSection>

Ở đây tôi đã đưa ra cho bạn ví dụ về việc sử dụng nhiều nhất là 4 Request. Và bạn cần chú ý rằng nếu trong ứng dụng của bạn có nhiều cấp request thì bạn cần khai báo những Url có cấp Request cao hơn trước. Như minh họa bạn thấy rule thứ nhất có 4 request tôi khai báo đầu tiên, tiếp đó là 3 cấp request tôi khai báo thứ hai, …

3. Trong httpModules của <system.web> bạn khai báo như sau:

<httpModules>
  <add name="RewriteModule" type="RewriteModule.RewriteModule, RewriteModule"/>
</httpModules>

Như vậy khi một liên có dạng http://mysite/123/234/345/ ở đây chính là post.aspx?ParentID=123&CateID=234&NewID=345. Vậy bạn cần xử lý trong code của trang post.aspx để lấy được các giá trị ứng với ParentID, CateID, NewID như sau:

protected void Page_Load(object sender, EventArgs e)
{
    //Khai báo dùng RewriteModule
    RewriteModule.RewriteContext con = RewriteModule.RewriteContext.Current;
    int ParentID, CateID, NewID;
    ParentID = int.Parse("0" + con.Params["ParentID"]);
    CateID = int.Parse("0" + con.Params["CateID"]);
    NewID = int.Parse("0" + con.Params["NewID"]);
}

Khi đó các giá trị ParentID sẽ là 123, CateID sẽ là 234, NewID sẽ là 345

Bạn có thể download thư viện và code mẫu về tại đây: http://www.mediafire.com/?g4px3j8che9onl5

(http://hmweb.com.vn)

Advertisements
  1. 2011/06/12 at 12:02 pm

    Em làm theo cách của anh,rewrite url các link của trang đều tôt,chỉ có điều khi rewrite các sự kiện postback của nut buton đều bị vô hiệu hóa.Anh có thể hướng dẫn em phần này được không ạ?em cám ơn anh nhiều!^^

  2. 2013/05/31 at 2:21 am

    It’s very straightforward to find out any matter on net as compared to textbooks, as I found this post at this web site.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: