"Chuyên trang dành cho kỹ thuật viên tin học" CHIA SẺ - KINH NGHIỆM - HỌC TẬP - THỦ THUẬT IISWebServer-Part5-URLRewriteinIIS7withURLRewriteModule Giới thiệu: Microsoft URLRewrite cho IIS 7.0 cung cấp những quy tắc linh hoạt nhằm viết lại những liên kết của website theo một dang khác mà vẫn đảm bảo đúng nội dung liên kết đó * Việc viết lại URL được dựa vào HTTP headers và server variables * Nội dung trang web. * Sự truy nhập tới nội dung trang web cần kiểm soát Download Module Download the x86 CTP version for IIS 7.0: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691 Download the x64 CTP version for IIS 7.0: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1692 Để sử dụng được URLRewrite bạn cần chuẩn bị đủ các yêu cầu sau: 1. IIS 7.0 & ASP.NET phải được enabled; 2. URLrewritemodule phải được cài đặt. 1. Khởi tạo và chạy thử URLRewrite Để sử dụng URLRewrite tôi sẽ sử dụng một ví dụ với một trang web ASP.Net. Trang web này sẽ chạy trên server variables và trích xuất kết quả của chúng ra trình duyệt. Copy toàn bộ nội dung trang ASP.NET vào thư mục %SystemDrive%\inetpub\wwwroot\ và file ví dụ trong bài này là article.aspx: Nội dung đoạn Code: < %@ Page Language="C#" %> < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>URL RewriteModule Test</title> </head> <body> <h1>URL RewriteModule Test Page</h1> <table> <tr> <th>Server Variable</th> <th>Value</th> </tr> <tr> <td>Original URL: </td> 1 of 9 <td>< %= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td> </tr> <tr> <td>Final URL: </td> <td>< %= Request.ServerVariables["PATH_INFO"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td> </tr> </table> </body> </html> Sau khi copy xong bạn vào http://localhost/article.aspx để test thử 2. Tiến hành URLRewrite Trong bài này tôi sẽ hướng dẫn bạn Rewrite một link đại khái như các trang Vnexpress.net , Vietnamnet.vn … có dạng như bên dưới: http://localhost/article/342/some-article-title sẽ được hiểu như link: http://localhost/article.aspx?id=342&title=some-article-title. Chúng ta sẽ sử dụng URLRewrite UI trong IIS Manager. Bạn làm theo các bước: Vào IIS Manager1. Chọn "Default Web Site"2. Trong Feature View chọn "URL Rewrite Module"3. 2 of 9 Trong mục "Actions" bên phải chọn "Add rule…" Đến đây ta có 2 cách để Rewrite một trang Web: Cách 1: chọn User friendly URL 3 of 9 Sau đó nhập chuỗi article.aspx?id=123&title=abc vào ô friendly URLs Chú ý là 123 sẽ đại diện cho các Request là số còn abc là đại điện cho các Request là chữ và bạn có thể thay thế 123 bằng con số bất kỳ và tương tự với abc bạn có thể thay thế abc bằng một chuỗi ký tự bất kỳ Tại ô Select an example bạn chọn dạng Rewrite là article/123/abc/ sau đó nhấp OK Một Rules mới được tạo trong bảng URLRewrite 4 of 9 Nhấp vào Edit Rule ta sẽ thấy chi tiết các giá trị của Rule này và bạn có thể tùy chỉnh lại các giá trị này Trở lại thư mục Web bạn sẽ thấy Windows sẽ tự tạo ra một file web.config mới với nội dung là các hàm URLRewrite tương ứng 5 of 9 Bây giờ bạn restart lại WebServer và vào lại localhost để test xem nhé: Cách 2: chọn Blank rule 6 of 9 Đặt tên cho Rule là Rewrite to article.aspx Trong ô "Pattern" bạn nhập vào chuỗi sau: ^article/([0-9]+)/([_0-9a-z-]+) Chuỗi này là một biểu thức bình thường mà chỉ rõ rằng mẫu sẽ phù hợp với bất kỳ chuỗi URL nào mà gặp những điều kiện sau đây. 1. Bắt đầu với chuỗi có đặc tính là "article/". 2. Chứa đựng một hoặc nhiều ký tự số sau dấu "/" đầu tiên. 3. Chứa đựng một hoặc nhiều chữ số hay dấu " _ " hay dấu "-" sau dấu "/" 3. Định nghĩa sự hoạt động: Một khi qui tắc mà bạn tạo ra để viết lại URL của một file ASP.net nào đó phải tương ứng với những gì mà bạn định nghĩa cho file ASP.Net đó trong mục Action, Chọn mục "Rewrite" trong mục "Action". Trong ô "Rewrite URL:" nhập chuỗi sau: article.aspx?id={R:1}&title={R:2} Sau đó nhấp "Apply" và lưu công việc của bạn lại Bây giờ bạn restart lại WebServer và vào lại localhost để test xem nhé: 7 of 9 4. Sử dụng URLRewrite Redirect: Với cách này bạn có thể dễ dàng chuyển trang bằng URLRewrite như ví dụ bên dưới http://localhost/blog/some-other-title/543 sẽ được chuyển đến: http://localhost/article/543/some-other-title Cách cấu hình cũng tương tự như trên nhưng có một số thay đổi khác chút: Ô Name bạn nhập: "Redirect from blog" Ô Pattern nhập: "^blog/([_0-9a-z-]+)/([0-9]+)" Mục Action chọn là: "Redirect" Ô Redirect URL nhập là: "article/{R:2}/{R:1}" Lưu ý là trong phần này ta đã chuyển đổi R:1 & R:2 hoán đổi vị trí cho nhau rồi. Bây giờ bạn vào Web Browser nhập 8 of 9 http://localhost/blog/some-other-title/323 Bạn thấy nó sẽ chuyển đến trang http://localhost/article/323/some-other-title 5. Ngăn chặn sự truy cập trực tiếp: Quy tắc thứ ba mà chúng tôi giới thiệu đến bạn được dùng để ngăn chặn mọi yêu cầu tới trang web nếu những yêu cầu đó không có định nghĩa trong URL Rewrite. Kiểu quy tắc này hữu ích khi bạn muốn ngăn ngừa những sự nỗ lực của hacker muốn tìm cách truy cập trực tiếp file nhằm khai thác lỗi SQL Injection. Mở file web.config chèn thêm các đoạn code sau vào: <rule name="Fail bad requests"> <match url="."/> <conditions> <add input="{HTTP_HOST}" pattern="localhost" negate="true" /> </conditions> <action type="AbortRequest" /> </rule> Bạn cần phải viết lại như sau: <rewrite> <rules> <rule name="Fail bad requests"> <match url="."/> <conditions> <add input="{HTTP_HOST}" pattern="localhost" negate="true" /> </conditions> <action type="AbortRequest" /> </rule> <rule name="Redirect from blog"> <match url="^blog/([_0-9a-z-]+)/([0-9]+)" /> <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" /> </rule> <rule name="Rewrite to article.aspx"> <match url="^article/([0-9]+)/([_0-9a-z-]+)" /> <action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" /> </rule> </rules> </rewrite> Kết luận Trong bài viết này hy vọng bạn đã hiểu để định hình được URLRewrite có những quy tắc nào và áp dụng chúng ra sao, bằng cách sử dụng IIS Manager của windows hay bằng việc bằng tay soạn thảo như thế nào trong file web.config. Chúc bạn thành công! OK mình vừa trình bày xong phần URLRewrite trong IIS7 với URLRewrite Module. Công ty TNHH đầu tư phát triển tin học GC Com Chuyên trang kỹ thuật máy vi tính cho kỹ thuật viên tin học Điện thoại: (073) - 3.511.373 - 6.274.294 Website: http://www.gccom.net 9 of 9 . tin học" CHIA SẺ - KINH NGHIỆM - HỌC TẬP - THỦ THUẬT IIS Web Server - Part 5 - URL Rewrite in IIS7 with URL Rewrite Module Giới thiệu: Microsoft URL. http://localhost/article/342/some-article-title sẽ được hiểu như link: http://localhost/article.aspx?id=342&title=some-article-title. Chúng ta sẽ sử dụng URL Rewrite UI trong IIS