Thứ Sáu, 21 tháng 3, 2014

hướng dẫn viết file .htaccess, web.config - C.liv

Nếu bạn đã lục tung google mà vẫn chưa viết được htaccess, web.config thì hãy làm theo hướng dẫn viết file .htaccess, web.config dưới đây.

Hướng dẫn viết file .htaccess và web.config!

Nội dung bài viết phù hợp với những bạn đang sử dụng ngôn ngữ PHP, những bạn đã và đang tìm kiếm cách rewrite url (chuyển url động thành url tĩnh) nhằm thân thiện với SEO hơn nhưng vẫn chưa thành công.


hướng dẫn viết file .htaccess, web.config

Khi nào cần dùng .htaccess và khi nào cần dùng web.config?
  • Dùng .htaccess khi sử dụng hosting Linux hoặc trên máy tính với XAMPP hoặc các phần mền tương tự.
  •  Dùng web.config khi sử dụng hosting Windows
Đầu tiên thì bạn vẫn phải tạo ra 1 file .htaccess trước dù bạn có sử dụng hosting Linux hay Windows, sau đó mình sẽ hướng dẫn convert sang web.config, các bạn có thể tham khảo cách tạo file .htaccess hoặc tải file .htaccess tại đây, cái này cũng khá đơn giản.

 Chú ý: kiểm tra apache của bạn đã bật rewrite_module chưa nhé, nếu bạn không biết thì lại lên google tham khảo cách bật rewrite_module, cái này cũng khá đơn giản.


 Tiếp theo, cũng giống như các bài viết hướng dẫn khác, chúng ta mở .htaccess bằng notepad và copy đoạn mã sau:


RewriteEngine On
RewriteBase /

Đoạn mã trên cũng giống như thẻ mở <html> hay <?php vậy.

Cách sử dụng như sau:
 Ví dụ: ta có đường dẫn chien.liv/?action=home hoặc chien.liv/index.php?action=home đều giống nhau (nếu dùng trên local thì nó sẽ là localhost/tên_folder/index.php?action=home).
Để chuyển nó thành chien.liv/home.html ta thêm dòng sau vào file .htaccess:

RewriteRule ^([^/]*)\.html$ /?action=$1 [L] 
 hoặc
 RewriteRule ^([^/]*)\.html$ /index.php?action=$1 [L]


Ta bắt đầu tìm hiểu 2 vế của đoạn mã:
  • Vế thứ nhất:  RewriteRule ^([^/]*)\.html$ phần màu đỏ sẽ là phần hiển thị trên thanh điều hướng của trình duyệt. ([^/]*) có nghĩa là nó sẽ nhận tất cả các giá trị truyền vào, nếu ta viết là (a-z0-9) thì nó sẽ chỉ nhận các giá trị từ a đến z và từ 0 đến 9 có phân biệt in hoa và in thường.
  • Vế thứ hai: /?action=$1 hoặc /index.php?action=$1 vế này thì dễ hiểu rồi, cái $1 kia có nghĩa là biến chứa giá trị home hoặc bất cứ giá trị nào khác ta nhập vào. Nếu $1 là home thì biến ?action=home, nếu $1 là gioi_thieu thì biến ?action=gioi_thieu. 
htaccess, web.config giúp bạn có một url đẹp


 Nâng cao 1 chút:

nếu như ta muốn truyền thêm nhiều biến bằng phương thức GET thì làm thế nào?
Ví dụ như chien.liv/?action=san-pham&id=123
 câu lệnh chúng ta cần viết vào .htaccess là:
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?action=$1&id=$2 [L]

Chúng ta thấy phát sinh thêm 2 vấn đề ở đoạn mã trên, đó là ([^/]*)/([^/]*) action=$1&id=$2
Ở vế thứ nhất lặp lại 2 lần ([^/]*) ngăn cách nhau bằng dấu / có nghĩa là biến action và id được ngăn cách bởi dấu / và đều nhận tất cả các giá trị truyền vào. $1 và $2 là giá trị lần lượt của biến action và id.
Lúc này, đường dẫn của chúng ta sẽ là chien.liv/san-pham/123.html 

Nói thêm:  ([^/]*)/([^/]*) sẽ là san-pham/123.html còn nếu là ([^/]*)_([^/]*) thì đường dẫn sẽ là san-pham_123.html
Ở đây các bạn chú ý sử dụng dấu phân cách giữa các biến, có thể là dấu / hoặc _ nhưng cần tránh việc truyền vào biến GET các giá trị có chứa kí tự trùng với dấu phân cách.
Cụ thể ở ví dụ trên là ([^/]*)/([^/]*)thì dấu phân các sẽ là dấu / thì ta không được truyền các giá trị có chứa dấu / vào biến. Ví dụ như san/pham, khi đó đường dẫn sẽ trở thành san/pham/123.html. Như vậy là nó sẽ không thể hiểu được đâu là biến action và đâu là biến id.

Chúng ta áp dụng kiến thức phía trên để sử dụng cho những phương thức GET chứa nhiều biến hơn.

Đây là vấn đề quan trọng mà các bài viết khác không hề nhắc tới: sau khi có được 1 file .htaccess nằm cùng cấp với thư mục chứa website, đối với các bạn chưa bao giờ tiếp xúc với .htaccess thì các bạn sẽ gõ thẳng lên thanh điều hướng của trình duyệt đường dẫn sau:
chien.liv/?action=san-pham&id=123 và chờ đợi đường dẫn biến thành chien.liv/san-pham/123.html

 
NHƯNG KHÔNG, chúng ta phải làm điều ngược lại, hãy gõ vào thanh điều hướng của trình duyệt đường dẫn chien.liv/san-pham/123.html và .htaccess sẽ làm nhiệm vụ chuyển các giá trị san-pham123 vào các biến actionid.Và bây giờ các bạn hãy thay đổi lại toàn bộ đường link trong website của mình đi nào.
 
Chú ý khi viết htaccess
Và bây giờ mình sẽ hướng dẫn các bạn convert sang web.config.
truy cập http://www.htaccesstowebconfig.com/ và tự mày mò nhé :v dễ như ăn kẹo.

Một số ví dụ khác cho các bạn hiểu thêm

chien.liv/sanpham.php?id=123
RewriteRule ^sanpham/([^/]*)\.html$ /sanpham.php?id=$1 [L]   
Đường đẫn sẽ là: chien.liv/sanpham/123.html
                                                                                        

chien.liv/sanpham.php?id=123&page=2
RewriteRule ^sanpham/([^/]*)/([^/]*)\.html$ /sanpham.php?id=$1&page=$2 [L] 
Đường dẫn sẽ là: chien.liv/sanpham/123/2.html
                                                                                               


  Nếu các bạn đang muốn có một đường dẫn như sau:

http://chienliv.blogspot.com/2014/03/huong-dan-viet-htaccess-web-config-cliv.html
nghĩa là có thêm tên sản phẩm hoặc bài viết trên url thì hãy theo dõi bài viết tiếp theo. Mình sẽ hướng dẫn các bạn ở bài viết sau. Nếu bạn đã làm theo hướng dẫn mà vẫn không thể thực hiện được, hãy để lại comment, mình sẽ hướng dẫn thêm

Chia sẻ Facebook và G+ nếu bạn thấy bài viết  hữu ích.




 

4 nhận xét:

  1. Bài viết của anh rất hay, cám ơn anh nhiều nhé!

    Trả lờiXóa
  2. anh làm hướng dẫn viết cái url có dạng năm/tháng/tên-sản-phẩm: http://chienliv.blogspot.com/2014/03/huong-dan-viet-htaccess-web-config-cliv.html
    như này đi.

    Trả lờiXóa
  3. bạn có thể hướng dẫn thêm cho mình phần code lại link trong php không.mình tạo được file .htaccess rồi những vẫn chưa thay đổi đường link được

    Trả lờiXóa
  4. host em bị lối tự động chuyển từ trang: lenguyengroup.com.vn sang trang lenguyengroup.com.vn/index.aspx
    ad có thể hướng dẫn em sửa lại không ạ. Thanks

    Trả lờiXóa