VIẾT LẠI URL TRONG ASP.NET – URL Rewriting in ASP

VIẾT LẠI URL TRONG ASP.NET – URL Rewriting in ASP

VIẾT LẠI URL TRONG ASP.NET

Đã bao giờ bạn thắc mắc tại sao đường link trong nhiều trang web bây giờ lại có dạng thế này chưa? Rõ
ràng theo những gì bạn học về web động, đường link này phải kiểu như là ABC.aspx?id=12345 mới đúng.
Hay trên máy chủ của trang này có một đống file .html? Dĩ nhiên là không rồi. Vậy tại sao? Chúng ta sẽ biết
ngay sau khi học về kĩ thuật viết lại URL dưới đây.
MỘT CHÚT KIẾN THỨC CƠ BẢN
Trước khi tìm hiểu, bạn cần phải biết một ít về hoạt động của máy chủ web, cụ thể ở đây ta nghiên cứu
về IIS (Internet Information Service).
Khi một yêu cầu được gửi đến IIS, nó sẽ kiểm tra phần mở rộng (extension) xem chương trình nào sẽ
tiếp nhận xử lý yêu cầu này (handle). Điều này đúng với không chỉ trang web như HTML, PHP, ASPX… mà
đúng với cả những thành phần tĩnh (static content) như ảnh, javascript, css… và cả những thành phần đặc
biệt như tệp (file) mã nguồn (source code) như .vb, .cs…
Ví dụ nếu yêu cầu tệp .aspx, ASP.NET (aspnet_isapi.dll) sẽ xử lý và trả lại nội dung dưới dạng HTML. Nếu
yêu cầu tệp .php thì PHP sẽ xử lý. Nếu yêu cầu tệp .vb, .cs thì ASP.NET lại nắm quyền xử lý, nhưng sẽ trả lại
thông báo nội dung không được phép truy cập.
Do Viet Hoa – Hanoi University of Science and Technology (doviethoa[at]ymail.com)
Thế với những tệp không có phần mở rộng! IIS 5 vẫn hỗ trợ việc này, và đến đây bạn có thể dần tưởng
tượng ra việc đầu tiên chúng ta phải làm rồi, đó là chuyển toàn bộ việc xử lý cho ASP.NET, để ngay cả URL
dạng http://domain.com/aaa bạn cũng vẫn làm việc được.
CÒN VỚI ASP.NET
Sơ đồ trên cho biết tiến trình xử lý của ASP.NET. Yêu cầu được chuyển qua các HTTP Module trước khi
thực sự được xử lý. Điều này cho thấy bạn có thể “bẻ lái” yêu cầu trước khi được xử lý cụ thể.
Ví dụ bạn muốn làm một trang tin, với URL có dạng ~/Page-{0}.html với {0} là trang cần xem (danh
sách tin tức có nhiều trang), bạn có thể tạo một HTTP Module thực hiện việc sửa URL từ ~/Page-{0}.html
thành ~/ViewList.aspx?page={0}, và trong website của bạn chỉ cần có tệp ViewPage.aspx trả về danh sách
bản tin là được.
Thế làm sao để thay đổi URL? ASP.NET hỗ trợ hoàn toàn việc này bằng phương thức (method)
HttpContext.Current.RewritePath(new_url)
Đến đây bạn có thể hiểu được “sơ sơ” tại sao có thể viết lại URL trong ASP.NET rồi. Bài viết này không
giúp bạn tự làm từ A-Z vấn đề này (vì nó khá phức tạp). Nếu muốn bạn có thể đọc thêm trên mạng (có rất
nhiều bài viết kèm mã nguồn về vấn đề này). Ở đây tôi muốn hướng dẫn bạn sử dụng một gói mã nguồn
mở để giải quyết vấn đề viết lại URL nhưng vẫn phải hiểu cách mà nó hoạt động.
HƯỚNG DẪN SỬ DỤNG
Bạn có thể tải về (download) tại đây: http://www.urlrewriting.net/159/en/downloads.html
Trong đó sẽ có một tệp .dll để bạn thêm vào ứng dụng web của mình, kèm theo là văn bản hướng dẫn
sử dụng.
Bước 1: chuẩn bị
Bạn phải chắc chắn rằng ASP.NET xử lý tất cả các yêu cầu trong IIS (như phần đầu đã nêu). Muốn thế
bạn phải chỉnh sửa một chút trong IIS. Ta xét trường hợp Windows được cài đặt bình thường ở ổ C (tức là
đường dẫn đến tệp xử lý ASP.NET là C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll).
Nhìn vào đây chắc bạn dễ dàng xử lý trong các trường hợp khác.
– Với IIS5: nhấn chuột phải vào website, chọn Properties. Vào tab Home Directory > Configuration > Add
rồi điền như hình.
Do Viet Hoa – Hanoi University of Science and Technology (doviethoa[at]ymail.com)
Lưu ý: phần Executable điền C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll, bỏ
chọn Check that file exists.
– Với IIS6: nhấn chuột phải vào website, chọn Properties. Vào tab Home Directory > Configuration >
Insert rồi điền như hình.
Lưu ý: cũng bỏ chọn Verify that file exists.
Vậy là xong. ASP.NET sẽ xử lý tất cả các yêu cầu. Dĩ nhiên bạn cũng có thể yêu cầu IIS chỉ gọi ASP.NET
với một số loại tệp. Khi đó với IIS5, phần Extension, bạn ghi phần mở rộng cần thiết (VD: .html), còn với
IIS6, bạn làm như IIS5.
Bước 2: cài đặt UrlRewritingNet
– Thêm tệp .dll của UrlRewritingNet vào website của bạn.
Bước này khá quen thuộc, có lẽ chỉ cần 2 hình minh hoạ là đủ để bạn biết phải làm gì rồi.
Do Viet Hoa – Hanoi University of Science and Technology (doviethoa[at]ymail.com)
– Thêm HTTP Module cho ASP.NET để UrlRewritingNet thực hiện việc sửa URL
(web.config)

– Đăng ký việc sử dụng cấu hình trong tệp web.config cho UrlRewritingNet
(web.config)
<configuration

– Cấu hình việc viết lại URL
(web.config)

Do Viet Hoa – Hanoi University of Science and Technology (doviethoa[at]ymail.com)
Nhìn vào ví dụ trên bạn có thể thấy name là tên (duy nhất) của một định nghĩa, virtualUrl là một chuỗi
Regex dùng để phân tích URL, destinationUrl là URL được viết lại, với $1, $2… là các giá trị lấy ra từ URL
gốc (phụ thuộc vào việc phân tách Regex của virtualUrl).
Đến đây ứng dụng web của bạn cơ bản đã thực hiện được việc viết lại URL. Đường link trông sẽ đẹp, và
còn an toàn nữa, vì người khác sẽ không thể biết được tệp xử lý thực sự tên là gì.
(phần sau tôi sẽ hướng dẫn bạn viết mã lệnh để khai thác các tính năng nâng cao với UrlRewritingNet)

3 Responses to VIẾT LẠI URL TRONG ASP.NET – URL Rewriting in ASP

  1. Noe Lynde nói:

    I simply want to tell you that I’m new to blogging and actually liked this web-site. Probably I’m likely to bookmark your blog post . You surely have beneficial articles. Bless you for revealing your blog.

  2. I simply want to tell you that I’m all new to blogs and actually enjoyed this blog. Very likely I’m planning to bookmark your blog . You actually have excellent writings. With thanks for sharing your web page.

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: