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.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
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ư đườ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
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
và
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.
Related posts:
0 nhận xét:
Đăng nhận xét