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
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à ([^/]*)/([^/]*) và 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-pham và 123 vào các biến action và id.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 |
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.
Bài viết của anh rất hay, cám ơn anh nhiều nhé!
Trả lờiXóaanh 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
Trả lờiXóanhư này đi.
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óahost em bị lối tự động chuyển từ trang: lenguyengroup.com.vn sang trang lenguyengroup.com.vn/index.aspx
Trả lờiXóaad có thể hướng dẫn em sửa lại không ạ. Thanks