Trước tiên chúng ta tìm hiểu cơ chế rewite:Rewrite Engine là một
phần dịch vụ của Webserver được dùng để thay đổi URL(đường dẫn trên
trình duyệt) sang một dạng khác với nhiều mục đích khác nhau.
Kỹ thuật được nói đến là URL rewriting
và nó đem lại những tiện lợi sau:- Làm cho URL trở nên thân thiện với
người dùng cũng như dễ dàng với các Search Engine (bộ máy tìm kiếm)-
Tránh lộ các đường link quan trọng- Tránh lộ các công việc bên trong
trước người dùng
Bản chất của việc rewrite này các bạn có
thể hình dung như sau: khi bạn gõ 1 đường link lên trình duyệt như sau:
http://vidu.com/news/2007/13/01 thì đây là đường dẫn ảo, và khi request
đến Webserver nó sẽ đổi lại thành đường dẫn thật như sau:
http://vidu.com/index.php?mod=news&year=2007&day=13&month=01
<< có thể là như thế này vì có nhiều cách rewrite.
Đối với Server Apache: để thực hiện được URL Rewriting bạn làm các bước sau:
1. Kích hoạt mod mod_rewrite có sẵn trong Apache bẳng cách sửa trong
file httpd.conf, bạn Find đến dòng chưa rewrite_module rồi bỏ dấu #
(nếu có) ở đầu đi. Sau đó restart Apache. Nếu bạn dùng các host trên
internet thì có thể đã có sẵn rồi.
2. Tạo 1 file .htacces có nội dung như sau:
Đầu tiên bật Rewrite Engine:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
Tiếp đến là viết cú pháp RewriteRule:
RewriteRule ^Virtual_Path Real_Path
Ví dụ:
RewriteRule ^topic_([0-9]*).html index.php?topic=
ví dụ: topic_1.html thành index.php?topic=1
RewriteRule ^article/([0-9]*)/page/([0-9]*) index.php?article=&page=
ví dụ: article/1/page/2 thành index.php?article=1&page=2
Cú pháp để viết các Rule này giống như cách viết của biểu thức chính quy Regular Expression. ví dụ như sau:
(.*) nhận tất cả các giá trị.
([0-9]*) chỉ nhận các giá trị là số, từ 0-9.
([a-zA-Z]*) chỉ nhận các giá trị là chữ cái, từ a-z và A-Z.
3. Sau khi tạo được file htaccess bạn copy nó vào thư mục gốc của web của bạn là có thể chạy được.
Đối với Server IIS: các bạn download gói cần thiết về để có thể thực hiện được việc rewrite, các bạn có thể download từ 1 số trang sau:
http://www.micronovae.com/ModRewrite/ModRewrite.html
http://www.qwerksoft.com/products/iisrewrite/
http://www.isapirewrite.com/
http://www.motobit.com/help/url-replacer-rewriter/iis-mod-rewrite.asp
Ngoài việc sử dụng mod url_rewrite như
trên thì nếu host của bạn ko có kích hoạt mod này hoặc bạn ko có quyền
để cấu hình nó như trên. Để đơn giản các bạn có thể tạo ra những cách
khác nhau để làm cho URL trở nên đẹp và thân thiện hơn. Dưới đây là 1
số cách khác nhau.
c1 dạng như sau: http://vidu.com/index.php/news/2007/13/01 <<
Trông rất giống với kiểu rewrite ở trên nhưng nó khác ở chỗ nó là đường
dẫn thật còn url rewrite là đường dẫn ảo. Đường dân này hiểu như là 1
request đến file index.php với Query String (Xâu truy vấn) là
/news/2007/13/01, các bạn tách xâu này ra rồi sử dụng theo mục đích của
mình. Cách này đang được trang web 24h.com.vn sử dụng.
c2 dạng như sau: http://vidu.com/index.php/news_2007_13_01.html
<< Gần giống cách 1 ở trên nhưng đường dẫn khác thân thiện với
đuôi html, dễ dàng cho các search engine (máy tìm kiếm như Google,
Yahoo) tìm kiếm nội dung.
c3 có thể viết như sau: http://vidu.com/index.php?q=news/2007/13/01
<< cũng gần giống cách 1 nhưng nó rõ ràng hơn, nó được dùng trong
FrameWork Drupal của PHP.
Và có thể có nhiều cách khác nhau các bạn có thể tự nghĩ ra. Hoặc có thể dùng cách mã hoá xâu truy vấn chẳng hạn.
Tài liệu tham khảo:
http://en.wikipedia.org/wiki/Rewrite_engine
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
Một số hình minh họa:
Figure 1: The control flow through the rewriting ruleset