01/10/2018, 16:52

Bài 04. Rewrite URL - Tạo đường dẫn thân thiện

Rewrite URL sử dụng htaccess hay còn gọi là đường dẫn thân thiện trong PHP là một kỹ thuật sử dụng mod URL Rewrite của máy chủ Web Server Apache để viết lại hay thay đổi đường dẫn của website cho nó gọn và dễ nhớ, việc viết lại đường dẫn như vậy có tác dụng thân thiện với người dùng, đường dẫn đơn ...

Rewrite URL sử dụng htaccess hay còn gọi là đường dẫn thân thiện trong PHP là một kỹ thuật sử dụng mod URL Rewrite của máy chủ Web Server Apache để viết lại hay thay đổi đường dẫn của website cho nó gọn và dễ nhớ, việc viết lại đường dẫn như vậy có tác dụng thân thiện với người dùng, đường dẫn đơn giản giúp người dùng dễ hiểu và dễ nhớ.Đồng thời nó cũng có tác giúp các cỗ máy tìm kiếm như Google và Bing index dễ dàng hơn. URL chứa từ khóa sẽ làm tăng giá trị của bài viết.

Ngoài ra các cỗ máy tìm kiếm như Google thích trang web tĩnh (.html) hơn là trang web động (?id=..).

URL Friendly = URL tĩnh và chứa từ khóa.

1. Không sử dụng .htaccess

Ví dụ: Mình sẽ đưa ra một giả thiết về chi tiết của một sản phẩm.

  • Tên sản phẩm: Nokia 110i.
  • ID sản phẩm: product_id=100;
  • Danh mục: Điện thoại Nokia.
  • ID danh mục: category=10;
  • Module xử lý: module=product;
  • Page xử lý: page=detail

a. URL chi tiết một sản phầm khi chưa Rewrite url.

http://example.net/?module=product&page=detail&category=10&product_id=100

Trong URL trên có 4 tham số bao gồm:

  • module = product: Chỉ module nào sẻ xử lý.
  • page = detail : Chỉ Page của module sẻ xử lý.
  • category=10 : Sản phẩm này nằm trong danh mục nào.
  • product_id=100: Sản phẩm này có ID bằng bao nhiều.

URL trên là một URL cơ bản của một trang web. Việc đưa lên tất cả tham số là ý đồ của người lập trình. Tuy nhiên với URL như vậy khiến cho người dùng khó nhớ khi vào xem bài viết, và hơn nữa là không tối ưu SEO trong các bộ máy tìm kiếm google, bing, yahoo.

b. URL chi tiết một sản phầm khi sử dụng Rewrite url.

http://example.net/dien-thoai-nokia/nokia-110i.html

Thật là tuyệt đúng không nào, dễ nhớ và chuẩn SEO đúng không nào? để có được url như vậy ta cần sử dụng file .htaccess.

  • Một lý do khác nữa là việc xử dụng .htaccess sẽ giúp cho website che giấu đi những thông tin không cần thiết về mã nguồn, luồng xử lý dữ liệu. Và người truy cập sẽ không muốn biết những thông tin không cần thiết này.

2. Sử dụng .htaccess.

B1. Là bạn cần tạo một file .htaccess đặt tại thư mục gốc.

B2. Để bắt đầu Rewrite URL, dòng lệnh đầu tiên trong file .htaccess phải là

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

B3. Cú pháp của Rewrite URL 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.

RewriteRule ^thanh-vien([0-9]*).html index.php?group=$1

Tiếp ví dụ trên:

http://example.net/dien-thoai-nokia/nokia-110i.html

Bạn sẽ viết RewriteRule (1)

RewriteRule ^(.*)/(.*).html$ index.php?module=product&page=detail&category=$1&product_id=$2 [L]

Hoặc

RewriteRule ^(.*)/(.*).html$ index.php?module=product&page=detail&product_id=$2&category=$1 [L]

Trong đó:

  • ^: Ký hiệu bắt đầu
  • $: Ký hiệu kết thúc
  • (.*): Nó là một biểu thức chính quy đại diện cho một miền giá trị.
  • $1,$2 được gọi là RewriteRule Back-reference ($N) trong đó 0< N <=9

RewriteRule Back-reference ($N) nó sẽ tham chiếu trở lại mẫu pattern. Nghĩa là $1 và $2 nó sẽ tham chiếu vào hai mẫu pattern ở đường dẫn ảo của bạn.

Lưu ý: Tính từ trái sang phải thì mẫu pattern lùi dần sẽ tham chiếu tới Back-reference ($N)  tăng dần.

Trong ví dụ trên thì điều gì sẽ xẩy ra nếu ta tạo ra tiếp một link cũng có cấu trúc tương tự vậy.

http://example.net/tin-tuc/donald-trump-lam-tong-thong-doi-thu-45-cua-nuoc-my.html

RewriteRule như sau.(2)

RewriteRule ^tin-tuc/(.*).html$ index.php?module=news&page=detail&news_id=$1 [L]

Có 2 trường hợp sẽ xảy ra:

  • Nếu (1) đứng trước (2) thì xung đột sẽ xảy ra vì quy tắc (1) bao gồm cả ca quy tắc (2).
  • Nếu (1) đứng sau (2) thì xung đột không xảy ra vì quy tắc (2) không bao gồm cả ca quy tắc (1).

Xử lý xung đột giữa các quy tắc RewriteRule.

  • Nếu quy tắc (1) bao gồm quy tắc (2) và quy tắc (2) không bao gồm quy tắc (1) thì bạn chỉ cần di chuyển quy tắc (2) nên trước quy tắc (1).
  • Bổ xung thêm một số tiền tố làm sao cho quy tắc (1) và (2) không bao gồm nhau (2).

Ví du: Nếu quy tắc Rewrite sản phẩm như sau thì sẽ không xảy ra xung đột.

RewriteRule ^san-pham/(.*)/(.*).html$ index.php?module=product&page=detail&category=$1&product_id=$2 [L]
3. Tổng kết

Qua bài viết này mình đã hướng dẫn làm sao để sử dụng .htaccess ứng dụng tạo đường dẫn thân thiện. Thì việc này sẽ mang lại lợi ích cho website, các cỗ máy tìm kiếm index nhanh, đẩy từ khóa vào URL. URL đơn giản và dễ nhớ..vv. Ngoài ra có một vài lý do đôi khi để URL kiểu nguyên bản cũng được không sao cả.

Sim Thành Đạt viết 23:26 ngày 23/09/2022

cho mình xin code chuyển từ đuôi abc.com/abc sang abc.com/abc/ với ah?
nghĩa là tất cả các link ko có / sẽ tự động chuyển sang link có đuôi /.
cảm ơn bạn nhiều

website của mình đang bị lỗi chỗ này, google báo lỗi: Trang chưa lập chỉ mục: Trang trùng lặp, Google đã chọn một trang chính tắc khác với lựa chọn của người dùng

0