Viết lại đường dẫn URL với Mod_Rewrite của Apache. Cấu hình .htaccess cơ bản

Từ khóa: rewrite url, duongdan, đường dẫn, url, rewrite, mod_rewrite,apache,seo,toiuu,quangba,quangcao,timkiem

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

Bài viết cùng chủ đề liên quan

  1. Mod_Rewrite, tối ưu URL cơ bản
    Viết lại đường dẫn URL qua mod_rewrite apache. Hướng dẫn chi tiết tiếng Việt.
  2. htaccess - .htaccess - Thuật ngữ SEO Webmaster - Quảng bá Website
    .htaccess là tên ngầm định của một file cấu hình chứa các \"chỉ dẫn máy chủ\" - những dòng lệnh có thể hiểu và biên dịch bởi máy chủ - nhằm điểu khiển máy chủ.
  3. Xử lý dấu tiếng Việt - Link URL thân thiện SEO
    Xử lý chuỗi ký tự có dấu tiếng Việt. Viết lại đường link thân thiện Friendly URL cho SEO.
  4. Độ dài bài viết và mức độ thường xuyên viết bài
    Phần 8 cuốn sách tiếng Việt \"Hướng dẫn kiếm tiền trên mảng của John Chow : Độ dài của bài viết và mức độ thường xuyên viết bài.
  5. Thành phần của một đường dẫn URL - Static URL vs Dynamic URL
    Định nghĩa các thành phần khác nhau của một đường dẫn URL. Sự khác nhau giữa đường dẫn tĩnh và động.

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

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

    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 :

    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 :

    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 :

    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 :

    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 :

    @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 :

    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 :

    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 :

    :)

    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 :

    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 :

    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 :

    @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 :

    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 :

    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 :

    :) 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 :

    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 :

    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 :

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

  19. NST :

    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 :

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

  21. quang ba Web :

    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 :

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

  23. Trung Duong :

    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 :

    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 :

    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 :

    Đâ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 :

    + 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 :

    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.

  29. vinhcdspnt :

    cho minh hoi: minh nhap dong lenh duoi day vao file .htaccess:
    RewriteRule ^Them-image-group-album-(.*)\.html$ ?nong=groups&option=add_img&groupid=$1 [L]

    Khi tren trinh duyet minh nhap: _http://Them-image-group-album–.html no cung chap nhan va nhu vay thi groupid se bang “-”, the nay thi kho^?. Mong admin chi giup lam the nao trong $1 thi nhan gia tri la so^’ thoi. Cam on

  30. vinhcdspnt :

    minh viet sai chu xin sua lai nhu sau:
    cho minh hoi: minh nhap dong lenh duoi day vao file .htaccess:
    RewriteRule ^Them-image-group-album-(.*)\.html$ ?nong=groups&option=add_img&groupid=$1 [L]

    Khi tren trinh duyet minh nhap: _http://Them-image-group-albumâ??.html no cung chap nhan va nhu vay thi groupid se bang â??-â??, the nay thi kho^?. Mong admin chi giup lam the nao de $1 chi nhan gia tri la so^â?? thoi. Cam on

  31. thanhjsc :

    Làm theo hướng dẫn của admin mà vẫn không có gì thay đổi.
    Mình dùng nukeviet, đường link có dạng modules.php?name=News&op=viewst&sid=121 thì làm thế nào mong admin chỉ giúp

  32. Monkey :

    Mình làm cái này rất ok , nhưng web của mình có nhiều phần dùng js . Nếu ai vào mà link đó có dạng là thumuc/100/tieude.html mà họ lại vào là thumuc/100/tieu/de.html thì js của web mình ko có tác dụng nữa . Có cách nào hạn chế dấu / khi dùng mod_rewrite không vậy Admin .
    Giống như web hiện giờ admin đang dùng vậy đó . Thanks nhiều ..

  33. Hiep Nguyen :

    Chào Bác! Mình muốn làm mà mấy link có đuôi dạng html trên URL giống thằng enbac.com thì phải làm sao? Cảm ơn bác!

  34. Anh :

    Sao mình làm được rồi.Nhưng lúc chạy thì nó không có gì thay đổi cả vẫn giống như lúc chưa có file .htaccess

  35. Daniel :

    hi xin chao cac bac minh doc hoai ma kg hieu ve .htaccess, minh chi biet nom na .htaccess de rewrirte lai.
    vi du:
    RewriteRule ^download/(.*)$ /download.php?id=$1 [L]
    #sẽ chuyển /download/X thành /download.php?id=X.

    minh da thu tao file .htaccess de vao thu muc www nhung ket wa kg co gi thay doi, xin cac bac giup do cho vi du minh muon giau links http://localhost/private/download/index.php = http://localhost/page?id=download

    nhu vay thoi co bac nao biet xin chi gium, thanks

  36. Quyet :

    xin chao Admin,
    Anh a em da lam nhu ben anh huong dan:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -s
    RewriteRule ^index.html test.php [L]

    nhung ma khi em chay thi no van nam yen khong thay doi gi ca.
    va khi em xem trong phpinfo thi mod_rewrite cung da duoc kich hoat.
    Nho admin chi dum.

  37. quang ba Web :

    Bạn Quyet viết thế thì không chạy là đúng rồi, bạn phải hiểu ý nghĩa của dòng lệnh. Cái khó của htaccess là ko được viết sai :D .

    Trong trường hợp của bạn thì chỉ cần
    RewriteEngine on
    RewriteRule ^index.html test.php [L]

  38. nguyễn minh kha :

    xin chao admin.xin admin giúp mình để con bot google tự hiển thị đúng đường dẫn trển tỉm kiếm của gôgle.

    lúc trước mình không có thư mục của forum,tức là web của mình là:http://paothoc.co.cc ,cho nên tất cả hiển thị trên gôgle là paothoc.co.cc/showgroups.php ..
    bi giờ mình đưa thư mục chứa forum là http://paothoc.co.cc/up
    mình đang đặt .htaccess của mod seo v2.2 ở thư muc gốc(htdocs) để tạo sitemap
    vậy minh cần thêm lệnh nào để con botgoogle hiển thị đúng đường dẫn vào forum,xin admin chỉ giáo

  39. quang ba Web :

    Việc thay đổi đường dẫn sẽ được Google cập nhất, tuy nhiên tùy vào thứ hạng Website của bạn mà việc này diễn ra nhanh hay chậm. Việc sử dụng sitemap XML cũng sẽ giúp Google đánh chỉ số lại nhanh hơn.

    Một giải pháp toàn diện khi thay đổi được dẫn, cho người dùng thường (không rơi vào lỗi 500, file not foun) và máy tìm kiếm là sử dụng redirection 301, để chuyến hướng từ thư mục gốc đến thư mục forum, trong trường hợp của bạn. Hãy đọc thêm tại Redirection 301 cho thư mục.
    Chúc bạn thành công.

  40. Quyet :

    Xin chao Admin.
    Nho anh chi giup em, khi em rewrite url tu index.php sang index.html thi khi chay trang index.html no van chay nhung ma sao khi go index.php thi no khong tu dong chuyen sang duoc index.html, bay gio no da rewrite duoc vi file index.html khong ton tai trong thu muc web va khi chay thi no hien thi noi dung cua trang index.php nhung khong hieu sao no khong tu dong thay doi khi minh chay link index.php
    nho admin chi giup.
    cam on nhieu.

  41. Phuoc Loc :

    Mình xem cái này mấy chục lần rồi mà vần không làm đc!
    ví dụ mình có site url như sau: index.php?cmd=cat&item=Item_01&cat=200&id=1000
    minh muon chuyen thanh:
    /sanpham/cataluge/ten_sub_con/tieude
    các bác chỉ giúp
    Can cau hinh trong.htaccess nhu the nào? va trong file index.php minh lam sao?

  42. manhtrungIT8x :

    Chào Admin,

    Mình muốn hỏi về FURL

    Ví dụ mình có 3 url sau tương ứng với 3 trường hợp (TH) :

    TH1 : http://site_name.com/index.php?act=view

    TH2 : http://site_name.com/index.php?act=view&id=1

    TH3 : http://site_name.com/index.php?act=view&id=1&page=10

    Trong file .htaccess mình viết như sau:

    RewriteEngine on
    RewriteRule ^(.*)-(.*)-(.*).html$ index.php?act=$1&id=$2&page=$3 [L]

    thì khi gõ http://http://site_name.com/view-1-10.html chỉ có TH3 run, còn các TH1 & 2 ko có các biến act hoặc id hoặc page thì ko run đc, vậy Admin có thể hướng dẫn giúp làm cách nào mà 3 TH đều run Ok ko?

  43. mèo con :

    blog e: tuyetyeuthuong.co.cc\blog làm = wordpress, host: 000webhost. e da lam thu htaccess mà không được. A chỉ cho e với!

  44. quang ba Web :

    Xin lỗi mọi người là trả lời hơi chậm trễ.
    @Quyet: Thông thường bạn phải redirect thư mục hoặc các tệp tin bằng lệnh redirect 301. Nhưng trường hợp này rất dễ rơi vào vòng lặp vô tận, dẫn tới lỗi 500. Bạn hãy xem thêm Redirect 301
    @PhuocLoc : Bạn có thể thử như sau :

    RewriteRule ^tutorials/(.*)/(.*)$ /tutorials.php?id=$1&page=$2 [L]
    RewriteRule ^/(.*)/(.*)/(.*)/(.*)$ /index.php?cmd=$1&item=$2&cat=$3&id=$4 [L]

    Có thể xem lại thư tự xem đã đúng chưa ?

  45. Help-14 :

    Em viết cái url rewwrite như thế này xong web truyện của em vẫn ko được google SEO và link hiển thị trên address bar của trình duyệt trở lại cái link cũ lúc chưa rewrite mặc dù link khi click vào là link đã rewrite:

    RewriteEngine on
    RewriteBase /
    RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)([-_]+)([a-zA-Z0-9]+)(.*)(.htm)$ http://truyen.poke-mega.org/index.php?image=3456&list=1&page=2 [QSA,L]
    RewriteRule ^([a-zA-Z0-9]+)(.htm)$ http://truyen.poke-mega.org/index.php?list=1 [QSA,L]

  46. quang ba Web :

    @Help-14 : Code php hiển thị link rewrite_url thì cậu viết chuẩn theo ý của mình, tuy nhiên code rewrite trong htaccess thì cậu lại viết chưa chuẩn xác. Trường hợp Website của cậu cũng không thật phức tập, cậu chỉ cần đọc kỹ bài viết đơn giản trên và áp dụng đúng thì sẽ làm được. Còn đương nhiên thì Google khi theo liên kết url rewrite sẽ bị redirect đến url rewrite bị viết lỗi trong htaccess, bởi thế cậu không thấy kết quả mong muốn.
    Thân

  47. Help-14 :

    Đây là code web truyện của em: http://www.mediafire.com/?xyhgzmjnzyy em đã sửa file index.php và .htaccess nhưng chả ăn thua, anh sửa để google seo được dùm em với !! http://www.google.com.vn/search?hl=vi&q=site%3Atruyen.poke-mega.org&btnG=T%C3%ACm+v%E1%BB%9Bi+Google&meta=&aq=f&oq=

  48. ngocnv :

    Chào mọi người em có 1 vấn đề nhỏ như thế này : em đã làm được url rewrite được nhưng em muốn thêm các tham số đằng sau nữa :
    VD : http://domain.com/san-pham/chi-tiet-san-pham.html?cmd=add_to_cart
    Em muốn Webserver nó phải nhận ra cái tham số cmd đó. Cho em hỏi có cách nào làm được không ạ ?

  49. tan dat :

    em muốn môi url đều chuyển về trang index lam sao?chi em với

  50. quang ba Web :

    @ngocnv: Thì cậu dùng htaccess để tách lọc tham số, có khá nhiều cách, nhưng mình nghĩ cậu có thể dùng như sau :

    RewriteRule ^rewrite-url/(.*)$ ([a-zA-Z0-9]+)(.htm)?cmd=$1 [L]

    @tan dat :
    Xem thêm phần htaccess và redirection 301 nhé
    Thân

  51. Hoàng Tứ :

    em có chạy 1 code cũng sử dụng cái này khi em chạy web thì vào phần admin khung soạn thảo bị thay hẳn bằng trang chủ trang web luôn , bỏ file htaccess đi thì khung soạn thảo lại bình thường , ai biết cách khắc phục này chỉ dùm em với a , em cảm ơn nhiều

  52. quang ba Website :

    @Hoàng Tử : Mình chưa hiểu rõ vấn đề của bạn với mod rewrite htaccess, bạn có thể nói rõ chi tiết hơn được không ?

  53. Thanh Nam :

    cho mình hỏi là khi dùng cách rewrite như vậy thì trong database mình có thay đổi gì không?

    vd: trong database co table NEWS ( ID, Title, Content ) –> file php news.php?id=12

    Bây giờ mình muốn thay thành /news/tim-kiem-thong-tin-viec-lam-12.html . Trong đó tim-kiem-thong-tin-viec-lam là cai Title sau khi đã xu ly Tieng Viet khong dau, 12 là ID —–> vay trong database co them 1 field Title_ID ( vd:tim-kiem-thong-tin-viec-lam ) hay không?

    thanks moi người nhiều

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