Jan 03

Viết lại đường dẫn URL (mod_rewrite, .htaccess, Apache)

Tại sao phải viết lại đường dẫn

Tại sao phải “viết lại” đường dẫn và sử dụng đường dẫn ảo ? Câu trả lời thật rõ ràng: đường dẫn rõ ràng ngắn gọn bao nhiêu, thành viên nhớ được nhiều bấy nhiêu. Dù site của bạn có nội dung gì đi nữa, thì mục đích của bạn luôn là giữ được nhiều thành viên nhất có thể. Về điểm này, đường dẫn ảo sẽ là giải pháp hoàn hảo cho bạn.

Ngoài ra về phương diện SEO, một đường dẫn URL tĩnh có thể giúp cho Google index dễ dàng hơn. Thêm nữa trong khi viết lại đường dẫn bạn có thể thêm các từ khóa vào trong đường dẫn. Trang Web tĩnh lúc này sẽ có lợi thế trong kết quả tìm kiếm hơn là một trang Web động với nhiều thông số mà Google có thể không thể index được (Quá 3 thông số chẳng hạn

Kiểm tra cấu hình Apache

Trước khi bắt đầu tìm hiểu về việc tạo và sử dụng đường dẫn ảo, bạn phải chắc chắn rằng server Apache của bạn (trên máy bạn chạy localhost hoặc trên server của nơi cung cấp host) phải có module mod_rewrite và module này đã được cài cho Apache. Trên localhost, bạn có thể cài cho Apache bằng cách sửa file Conf/httpd.conf: tìm đến những dòng có rewrite_module và bỏ dấu # ở đầu đi.Nếu đã giải quyết được vấn đề trên, chúng ta cùng bắt đầu nhé.

Viết lại đường dẫn URL (mod_rewrite, .htaccess, Apache)

Đầu tiên, bạn tạo 1 file tên .htaccess với nội dung như code bên dưới nhé :
Ghi chú :
Trong Windows, bạn không thể tạo được file chỉ với phần đuôi mở rộng, vậy nên đặt tên là htaccess.txt rồi upload FTP lên server và đổi tên lại thành .htaccess.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Tôi sẽ giải thích những dòng code trên ở các bước tiếp theo.

  • Dòng đầu tiên sử dụng để bật RewriteEngine.
  • Hai dòng tiếp theo là điều kiện để sử dụng Rewrite.
  • Chúng ta có thể chỉ dùng dòng đầu tiên và dòng cuối cùng trong 5 dòng mã trên. Tuy nhiên nếu chỉ có 2 dòng này, những đường dẫn tới thư mục và files thực sẽ ko sử dụng được. Đó là lý do chúng ta thêm vào 2 dòng số 2 và 3. Hai dòng này sẽ đặt điều kiện để server kiểm tra xem đường dẫn mà user sử dụng là có thật hay ko, trước khi xử lý nó như 1 đường dẫn ảo.
  • -d và -s là 2 giá trị mẫu dành cho việc kiểm tra THƯ MỤC và FILE thực. Ta sử dụng thêm [OR] để kết hợp 2 điều kiện này lại.
  • Dòng cuối cùng phụ thuộc vào quyết định của bạn, đường dẫn ảo sẽ được đặt ra sao.

Cú pháp sử dụng RewriteRule như sau:

RewriteRule Pattern Substitution

Với Pattern là định dạng của đường dẫn ảo sẽ được áp dụng cho đường dẫn thực tương ứng (Substitution).
Bạn có thể sử dụng nhiều định dạng cho những đường dẫn thực khác nhau.
Ví dụ:

RewriteRule ^tutorials/(.*)/(.*)$ /tutorials.php?id=$1&page=$2 [L]

sẽ chuyển /tutorial/X/Y (đường dẫn ảo) thành

/tutorial.php?id=X&page=Y (đường dẫn thực)

còn

RewriteRule ^download/(.*)$ /download.php?id=$1 [L]
#sẽ chuyển /download/X thành /download.php?id=X.

Viết lại đường dẫn URL nâng cao

Trong hướng dẫn này, tôi giới thiệu với bạn 1 cách theo tôi là khả thi nhất để giảm số lần sửa đổi đối với file .htaccess: sử dụng duy nhất 1 file PHP để xử lý mọi trường hợp của đường dẫn ảo. Đây chính là cách mà tôi sử dụng cho site mà bạn có thể nhìn thấy tại dòng thứ 5 của đoạn mã trên. Tất cả các đường dẫn sẽ được chuyển tới file index.php và được xử lý tại đây.

Để xem chúng ta cần những gì trong file index.php nhé.
Trước hết bạn phải thiết kế 1 chuỗi truy vấn có thứ tự cố định.
Một ví dụ minh hoa: ko có sự khác biệt giữa 2 đường dẫn

index.php?view=tutorials&id=1&page=2

index.php?view=tutorials&page=2&id=1

nhưng khi user truy cập qua đường dẫn ảo, sẽ có khác biệt giữa
/tutorials/1/2 và /tutorials/2/1.
Đó là lý do tôi dùng cụm từ “chuỗi truy vấn có thứ tự cố định”.
Tiếp theo, giả sử bạn đã quyết định được 1 chuỗi truy vấn cho mình có thứ tự như sau: vị trí đầu tiên dành cho PHÂN MỤC, vị trí thứ hai cho ID, vị trí thứ 3 cho SỐ TRANG, …. Chúng ta sẽ xử lý đường dẫn ảo qua index.php như sau:

if(!$QUERY_STRING) {
// sử dụng điều kiện này để tiếp tục dùng
//đường dẫn kiểu truy vấn.
$url=strip_tags($REQUEST_URI);
$url_array=explode(”/”,$url);
// vì chúng ta sử dụng $REQUEST_URI nên $url_array luôn có giá trị đầu rỗng
// sử dụng array_shift() để cắt giá trị đầu tiên
array_shift($url_array);
// gán các giá trị tương ứng lấy từ đường dẫn ảo
$_REQUEST[´view´] = $url_array[0];
}

Tất cả chỉ cần có vậy để có tạo được đường dẫn ảo ngắn gọn và dễ nhớ cho site của bạn và nâgn cao khả năng cạnh tranh để có thứ hạng cao trên công cụ tìm kiếm.

Tham khảo và sửa đổi từ blog.vnseo.com.

Hoài Nam - http://www.vietseo.net

Tags: SEO, may chu, server, url, lien ket, VietSEO, duong-dan, url rewrite, url than thien, cau hinh, htaccess, php, mod_rewrite

Chủ đề tượng tự

28 lời bình cho “Viết lại đường dẫn URL (mod_rewrite, .htaccess, Apache)”
  1. Thuc Nguyen Says:

    Ban oi giup minh voi. Minh lam theo huong dan chua ban chay ok, nhung cac file css, sj, image deu bi sai. Giup minh nhe. Cam on nhieu

  2. admin Says:

    Khi viết lại đường dẫn thì cac file include thường có thể không tìm thấy khi mà đường dẫn là tương đối (so với một thư mục, thư mục gốc chẳng hạn). Vì vậy có hai giải pháp:
    -Sử dụng thẻ < base href="..."> trong file php cần chuyển (đặt tại phần header)
    - Thứ hi là sử dụng đường dẫn tuyệt đối cho file ảnh và CSS ví dụ thay vì dùng đường dẫn tương đối “./wp-content/themes/seoblog/style.css” thì mình dùng đường dẫn tuyệt đối “http://www.vietseo.net/wp-content/themes/seoblog/style.css”

    Chúc bạn thành công.

  3. Lê Minh Says:

    Bài viết này rất hay. Không hổ danh là vietseo lên google search với rất nhiều keyword liên quan đến seo đều dẫn tới vietseo ;).

    Xin giải thích lại giùm mình đoạn này:

    1. if(!$QUERY_STRING) { // sử dụng điều kiện này để tiếp tục dùng đường dẫn kiểu truy vấn.
    2. $url=strip_tags($REQUEST_URI);
    3. $url_array=explode(”/”,$url);
    4. // vì chúng ta sử dụng $REQUEST_URI nên $url_array luôn có giá trị đầu rỗng
    5. // sử dụng array_shift() để cắt giá trị đầu tiên
    6. array_shift($url_array);
    7. // gán các giá trị tương ứng lấy từ đường dẫn ảo
    8. $_REQUEST[´view´] = $url_array[0];
    9. }

    Admin xin cho mình hỏi thêm làm sao để rewrite từ index.php?action=news&id=1 thành /tieu-de-bai-viet-mot.html vậy? Không lẽ phải query theo title của bài viết à? Tuong tu nhu WordPress /?id=1 thành /categories-mot/sub-categories-mot/tieu-de-bai-viet-mot/

    Thanks!

  4. admin Says:

    Rewrite URL cho WordPress
    Nếu cậu dùng WordPress thì mọi việc rất đơn giản, WordPress hỗ trợ các các lựa chọn pemenant link. Cậu xem thêm bài viết Cấu hình Pemanent links. Bài viết khá chi tiết và đưa ra quan điểm riêng của vietSEO.

    Phương pháp chung
    Còn nhìn chung khi muốn viết lại đường dẫn thì có hai việc :

    1)Chọn đường dẫn hợp lý:

    - Phải đưa ra liên kết đã thân thiện hóa trong code, URL thân thiện phải chứa từ khóa và các tham số (ví dụ như cậu đưa ra là “news” và “1″) cũng như những từ khóa (thường là tớ lấy tiêu đề).
    - Dùng htaccess hay PHP để trả lại kết quả trang tĩnh được viết lại này từ trang động ban đầu.

    Ví dụ : Tớ viết lại đường dẫn bài viết “Sinh Viên Việt Nam - Học Sinh - Sinh Viên” có địa chỉ URL động ban đầu là _”http://aevn.fr/index.php?showtopic=2433″. Tớ quyết định lấy tên đường dẫn mới là :”http://aevn.fr/topic/sinh-vien-viet-nam-hoc-sinh-sinh-vien-t2433/”
    Các bạn thấy :
    - Thư mục “topic” để viết đó là bài viết (khác “forum” hay “member” …)
    - Từ khóa là tiêu đề bài viết đã được xử lý dấu tiếng Việt
    - Tham số id của bài viết t2433, t để ngăn cách, tránh trường hợp tiêu đề cũng kết thúc bằng một số (t=thread)

    2)Thay đổi code và Server

    - Tớ viết lại code của phần showforum hay portal, tóm lại là bất kể phần nào hiển thị liên kết tới bài viết này sao cho địa chỉ mới là địa chỉ URL đã được viết lại nói trên.
    - Can thiệp vào htaccess hay code PHP để khi yêu cầu đường dẫn URL thân thiện thì server trả lại nội dung trang động ban đầu.

    Tùy thuộc vào cấu trúc, phần mềm quản trị nội dung (CMS) của bạn mà dùng các phương pháp, MOD thích hợp cho việc thân thiện hóa đường dẫn.

    Chúc các bạn thành công.

  5. mod_rewrite on Apache 2.2.8 Says:

    Mình cài WAMPSERVER (Apache 2.2.8), đã bật mod_rewrite và tạo thử file .htaccess như trên nhưng chạy không được.
    # .htaccess
    RewriteEngine on
    RewriteRule ^tutorials/(.*)/(.*)$ /tutorials.php?id=$1&page=$2 [L]

    Vd: chạy http://localhost/test_rewrite/tutorials/a/2
    thì nhận đc lỗi “The requested URL /web/knguyen/alice.htmla was not found on this server.”.

    Xem phpinfo() thì thấy mod_rewrite đã load.

    Hổng biết bị lỗi gì, nhờ vietseo chỉ giúp. Cảm ơn nhiều

  6. quang ba Web Says:

    @mod_rewrite on Apache 2.2.8 : Cậu thử xem lại đường dẫn thư mục test_rewrite. Có hai cách :
    - Cậu thử tut này bằng cách đặt .htaccess tại ngay thư mục gốc www của apache.
    - Nếu dùng thư mục test_rewrite để thử thì cậu hãy đặt .htaccess trong thư mục này

    Cậu hãy thử rewrite đơn giản không biến dạng như :
    RewriteEngine on
    RewriteRule ^vidu.php$ /vidu.html [L]
    Trong đó file vidu.html là có thật.

    Nếu mà vẫn không được thì tớ đang nghĩ đến file alice.html 404 not found của cậu, cậu trở đến file nào mà nó lại tìm đọc alice.html nhỉ ?

  7. ihoapm Says:

    Cảm ơn bạn!

    Mình thử đưa trực tiếp vào directive của docroot (C:/…/htdocs) thì chạy được, nhưng để trong .htaccess thì không đc, 2 dòng rewrire như bạn nói:
    RewriteEngine on
    RewriteRule ^vidu.php$ /vidu.html [L]

    Còn nữa, trên đây là thử với PHP 5.2.5 - còn với bản 4.4.2 thì hổng được (thử phpinfo() nó không thấy module mod_rewrite !??)

    Khổ nỗi code theo kiểu PHP4 thì nhiều, giờ chuyển lên ver 5.x lại phải sửa nữa thì khốn, hic ;)).

  8. quang ba Web Says:

    Nếu thư mục gốc được rồi thì bây giờ cậu luôn đặt .htaccess tại thư mục gốc, khi viết đường dẫn chứa các thư mục con thì cậu chỉ việc thêm tên các thư mục con này vào đường dẫn trích ra trong .htaccess tại thư mục gốc thôi.

    Còn phiên bản PHP thì không bị ảnh hưởng, nếu có hay không thì cậu chú ý cái dấu / trong đường dẫn /vidu.html

    Đôi khi nó là thế này :
    RewriteEngine on
    RewriteRule ^vidu.php$ vidu.html [L]
    Cậu thử kiểm tra lại nhé.

    Tóm lại là chỉ cần viết đúng htaccess thôi còn lại thì cậu đặt ở thư mục con vẫn phải hoạt động bình thường.

  9. ihoapm Says:

    :)

    Mình nói được ở đây là config trực tiếp thẻ trong httpd.conf á, chứ .htaccess thì không được (ở localhost), còn host thuê thì okie, nhưng chỉ để .htaccess ở www chứ sub dir cũng hổng được.

    Thx

  10. tom Says:

    Có ai biết cách bật mod rewrite khi đang sử dụng virtual host không?

    Mình đã làm nhiều cách mà vẫn không được, mong các bạn hướng dẫn dùm

  11. ihoapm Says:

    File .htaccess như thế này:
    1. RewriteEngine on
    2. RewriteCond %{REQUEST_FILENAME} -d [OR]
    3. RewriteCond %{REQUEST_FILENAME} -s
    4. RewriteRule ^.*$ - [L]
    5. RewriteRule ^(.*)$ index.php [L]
    đặt ngay public_html của server.

    Có vẻ như dòng 2 và 3 không có hiệu lực, vì khi thử truy cập vào các thư mục hoặc file thực nhưng vẫn bị redirect lại index.php. Nếu xóa file .htaccess đi thì nhận được lỗi 404. Chỉ chạy được mỗi file index.php tại public_html.

    Mình thử tại đây, admin fix giúp mình nhé:

    http://khangnguyen.vn
    file thực: http://khangnguyen.vn/images/search.gif

    Thx

  12. quang ba Web Says:

    @ihoapm : Bạn dùng dòng lệnh sau chuẩn hơn :

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    Cái này chắc chắn phải OK, có thể thay index.php bằng thư mục khác nhé, hoặc có thể thay RewriteBase bằng các thư mục khác. Nhưng phải nhớ vị trí tương đối của mình ở đâu so với file .htaccess thực thi.

    Chúc thành công.

  13. ihoapm Says:

    Vẫn thế bạn ạ!
    Bạn thử vào “http://www.khangnguyen.vn/images/search.gif” sẽ output thế này:
    “you ‘ve request: /images/search.gif” hoặc “you ‘ve request: xxx” với (xxx) là path sau khangnguyen.vn. (output của index.php á, tớ đang test í)

    hix, chắc phải tiếp tục dùng url with params thôi, khổ quá… Host support thì bảo sang vietseo xem, sang đây cũng … tắc đường, khổ thân…

  14. quang ba Web Says:

    Host support là nghĩa vụ của họ vì làm thương mại, chứ vietseo đâu có liên quan gì. Tớ chỉ khoái trao đổi, giúp đỡ được ai thì giúp thôi chứ có vụ lợi đâu. Nếu không thì đưa FTP tớ làm thử cho :D

  15. ihoapm Says:

    :) Tớ hổng có ý vụ hay lợi, hihi!
    Cậu thử vào 2 url trên í, tớ chịu chết á, “nó” chẳng chịu “nhúc nhích”, hix.

  16. NST Says:

    cảm ơn admin về bài viết này,rất hay
    theo như những gì admin nói ở trên thì rewrite kiểu gì thì trên url cũng phải có ID của “bài viết”
    vd : localhost/Rewrite/topic/1234 (1234 là ma so cua bai viet)
    nhưng tớ thấy tại viéteo.net thì trên url ko hề có ID đó mà chỉ toàn là từ khóa hc tiêu đề bài viết
    vd: http://www.vietseo.net/webmaster/apache/rewrite-url-apache-htacess/
    (ko hề có id trên url )

    làm sao để làm đc như vậy

  17. quang ba Web Says:

    Bạn hoàn toàn hiểu đúng về cách viết lại đường dẫn URL. Nếu như bạn để ý, trên các plate-form (Bulletin Boards : Vbulletin, Invision, phpBB hay CMS : Joomla) khi không tính đến Rewrite URL với Friendy URL (FURL) thì mình phải thêm ID đâu đó trong đường dẫn. (Ví dụ Trao đổi liên kết với AEVN, Phần mềm Karaoke)

    Tuy nhiên mình nhắc lại là site của vietSEO dùng WordPress, và WP đã tính đến hết khả năng này, nên nó đã thêm một table chứa đường dẫn permalink (tớ chọn ở đây là FURL không chứa ID, giờ, ngày post, cậu xem thêm chọn permalinks WordPress).

    Vấn đề khó khăn khi viết FURL là :

    • Với nội dung do Webmaster viết thì họ có thể chọn permalinks dạng FURL không chứa ID, không trùng nhau cho các bài viết khác nhau. Có thể áp dụng tốt cho các trang dạng Blog.
    • Tuy nhiên với các trang mà nội dung cho người dung tạo ra như Forum, CMS, thì đường dẫn URL không chứa ID rất dễ bị trùng nhau nếu không có thêm các tham số về ngày, giờ post … Vì đơn giản là người dung không có ý niệm gì về sự trùng nhau khi tạo permalinks (nếu có) hay đặt tiêu đề bài viết (tạo Permalinks từ tiêu đề). Và khi đó vỡi mỗi nội dung mới được tạo ra (chủ đề chẳng hạn), plate-form đó sẽ tạo ra một FURL như thế nào để không trùng nhau ngoài cách thêm các ID hay giờ, ngày tháng … ?

    Vì vậy việc có thêm các ID hay ngày tháng, giờ post là điều thường thấy và là giải pháp cho các trang mà nội dung do người dùng xây dựng hay đóng góp và mỗi nội dung đó đều được tạo một URL tĩnh tương ứng.

  18. ihoapm Says:

    ;-)
    Hihi, cuối cùng thì cũng đã chuyển sang FURL xong, cảm ơn vietseo nhiều!!!

  19. NST Says:

    admin cho tớ hỏi tí
    + tớ thấy nhacso.net có link như sau
    http://nhacso.net/Music/Album/2008/05/05F669F5
    05F669F5 có phải là ID của album ko ?
    php có làm làm ID kiểu vừa số vừ chữ như thế đc ko
    + file .htaccess liệu có bị người khác down về ko (nếu họ biết đường dẫn)
    tớ không muốn người khác biết đc cách Rewrite của tớ.
    + thêm một câu hỏi ngoài chủ đề :
    admin có ebook nào nói về các Hàm trong php ko.
    (^_^)
    thank !

  20. NST Says:

    a
    admin cho em nich chat cái
    để khi nào có gì thì hỏi cho tiện

  21. quang ba Web Says:

    Chào NST,

    Linh nhạc từ nhacso với ID cậu trích ra có thể liên quan tới ID của album. Tuy nhiên đây là ID đã được mã hóa. Có nhiều trang Web đã giải mã được và cho phép bạn có đường dẫn trực tiếp của tài nguyên nhacso. Tuy nhiên có nhiều trang nhạc sử dụng cơ sở dữ liệu (CSDL) để chứa đường dẫn trực tiếp nên nó chỉ hiện đường dẫn khi sau khi truy cập địa chỉ URL gián tiếp liên kết với URL trực tiếp của tài nguyên qua CSDL.

    Bạn có thể sử dụng các website với các dịch vụ download hoặc trong bất kết trường hợp nào sử dụng các Download Helper dạng như Extension của FireFox hay các phần mềm sinpper Ethernet : URL Helper,Ethereal …

    Quay trở lại chủ đề chính với câu hỏi thứ hai, thì file .htaccess theo ngầm định trên máy chủ Apacher được cấu hình chuẩn không cho phép người dùng hay nhóm người dùng public được quyền xem, sửa đổi nội dung. Vì thế tệp tin cấu hình .htaccess của cậu sẽ không thể bị download về được. Xin nhắc lại đây là tệp tin cấu hình máy chủ Apache cho phép tùy biến cấu hình và cách xử lý của máy chủ nên nó chứa rất nhiều thông tin và tùy chọn nhạy cảm nên không víible với public. Tương tự trong trường hợp cậu sử dụng tệp tin lưu mậtk hảu của người dùng hay nhóm người dùng .htapasswd thì nó cũng được set permission không cho phép xem và sửa nội dung đối với user là public.

    Còn về các hàm php thì mình thường tra trên http://www.php.net còn không dùng ebook nào cả. Không biết đã có project dịch các hàm php ra tiếng Việt chưa ?

    Cuối cùng, mình chỉ hỗ trợ các câu hỏi kỹ thuật qua Comment và trên Website vì như thế những người đến sau có thể tham khảo được câu hỏi và câu trả lời. Ngoài ra cũng có thể chuẩn bị nhiều hơn cho mỗi câu trả lời. Tăng chất lượng hỗ trợ thành viên trên toàn site.

    Cám ơn bạn đã quan tâm.

  22. minh Says:

    hahahaaha
    cai dia chi trang web cua ban hay lem do
    ahahaahah

  23. Trung Duong Says:

    Chào admin
    cho mình hỏi
    Mình có mở file httpd.conf ra nhưng không có dòng nào có mod_rewrite cả. Bên cạnh có file httpd.conf_AMPstart.bak, mở ra có thấy mod_rewrite mình xóa dấu # đi nhưng cũng không chạy được permalink. Bạn có thể giúp mình được không?
    Chân thành cảm ơn!

  24. quang ba Web Says:

    fiel httpd.conf_AMPstart.bak là tệp tin lưu, bản nháp thôi chứ không phải tệp tin hiệu lực.
    Để kích hoạt mod này, bạn làm như sau :

    Enable mod_rewrite

    1. Tìm tệp tin httpd.conf file (thường nắm tỏng thư mục conf, config, …)
    2. Trong file httpd.conf bỏ comment (#) dòng “LoadModule rewrite_module modules/mod_rewrite.so” (bỏ dấu ‘#’ đầu dòng)
    3. Tìm dòng “ClearModuleList” và bỏ comment cũng như dòng “AddModule mod_rewrite.c”.

    Để kiểm tra, thì hãy tạo file .htaccess tại thư mục nào đó kiểu “test” với nội dung như sau :
    ————
    Options +FollowSymLinks
    RewriteEngine On
    ————–
    Giờ thì bạn hãy trỏ trình duyệt tới thư mục vừa đặt file .htaccess
    (http://localhost/test/). Có hai khả năng xảy ra :

    1. Không có báo lỗi nào, như vậy là mod_rewrite đã được kích hoạt.
    2. 500, Internal Server Error : Nếu bạn gặp lỗi này thì có nghĩa là mod_rewrite chưa được cài đặt/kích hoạt trên máy chủ Apache.
    3. .

    Chúc bạn thành công.

  25. NST Says:

    admin cho hỏi 1 câu
    tớ đang định dùng biến $QUERY_STRING; để lấy giá trị
    nhưng tớ thấy đối với host Linux thì ko lấy đc $QUERY_STRING thì phải
    vậy có cách nào khắc phục ko

  26. quang ba Web Says:

    Đâu có, Apache của tớ chạy trên Linux dùng tốt biến này.
    Cậu thử làm ví dụ sau nhằm viết lại đường dẫn kiểu
    _http://domain.com/grab?foo=foobar (phía người dùng) sang _http://domain.com/page.php?bar=foobar (phía server) như sau :
    —-
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{QUERY_STRING} foo=(.*)
    RewriteRule ^grab(.*) /page.php?bar=%1
    —-

    Chúc cậu thành công.

  27. NST Says:

    + admin xem thử tớ làm code thế này liệu có kết quả tốt trên google ko
    http://2htvn.net
    + tớ định tích hợp ajax vào code này kiểu như:
    http://hayso1.com/m/#Album,3289
    nhưng nếu làm kiểu ajax như này thì muốn google tìm đc dến web mình thì lại phải làm 1 file dạng như sitemap để index vào google.
    (hướng dẫn dạng như này http://xtre.us/showthread.php?t=397 )
    theo admin thì làm như thế liệu có hiệu quả bằng http://2htvn.net/mp3/?/Song/Play/149

  28. quang ba Web Says:

    Chào 2htvn !

    Cám ơn bạn đã quan tâm chủ đề. Tớ đã xem kỹ trang Web 2htvn, rất đẹp và trình bày hợp lý và nhiều dữ liệu.

    Hai cách cậu đưa ra tớ cũng em kỹ và câu trả lời của tớ là cách rewrite URL hiện tại của 2htvn thuận tiện hơn cho công tụ tìm kiếm. Lý do vì cách thứ nhất rất dễ bị qui vào kỹ thuật cloaking. Khi mà nội dung hiển thị cho Search Engine lại khác nội dung cho người dùng thường. Và cấu trúc chỉ được tìm thấy qua sitemap.

    Tuy nhiên đường dẫn hiện tại của 2htvn có thể cải thiện thêm nữa bằng cách rút gọn bớt thư mục con “/” như dấu hỏi, tham biến “?” hay thư mục con “Play” bằng nhiều cách. Trong đó dùng .htaccess và gắn nhiều biến vào trong một thư mục: Như chuyển từ “/Song/Play/149″ sang “/Ten-bai-hat-s149.html” hay “/Ten-bai-hat-s149/” chẳng hạn. Điều này sẽ giúp trang của bạn được đánh chỉ số tốt hơn rất nhiều.

    Còn một cách rewrite-URL Web 2.0 bằng việc kết họp sử dụng song song Ajax và Web Static. Bạn hãy format đường dẫn URL cho một bài viết trên nền Web 2.0 như sau :

    <a href=”ajax.htm?t=32” onClick=”navigate('ajax.html#t=32');
    return false”>Rewrite URL với .htaccess</a>

    Trong đó, ajax.htm?t=32 là một trang Web tĩnh bạn tạo ra song song với kỹ thuật Ajax. Người dùng không hỗ trợ JavaScript (Google) sẽ sử dụng đường dẫn Web static, còn lại người dùng thường hỗ trợ JavaScript sẽ sử dụng phiên bản Ajax. Đây là cách làm hay nhất cho trang Web 2.0.

    Thân.

1 TrackBack cho “Viết lại đường dẫn URL (mod_rewrite, .htaccess, Apache)”
  1. Sky Blog: I have a dream to help me cope with anything. » Viết lại đường dẫn URL (mod_rewrite, .htaccess, Apache) Says:

    [...] view plainprint? [...]

Bình luận của bạn