Cách Thiết Lập mod_rewrite và Chuyển Hướng URL Chuẩn SEO Trên Apache

Cách Thiết Lập mod_rewrite và Chuyển Hướng URL

Giới thiệu về Mod_Rewrite

Hãy nhớ lần cuối bạn ghé thăm một trang web mua sắm, tìm kiếm món hàng cụ thể mà bạn cần mua. Khi bạn cuối cùng cũng vào được trang đó, URL có thể trông như thế này:

gizmo.com/latest_and_greatest/specific_gadgets/exactly_what_youre_looking_for

Điều này không phải vì trang web đã dành thời gian để thiết lập từng thư mục bạn cần tạo ra để mua hàng, mà là nhờ một module tiện dụng có tên Mod_Rewrite.

Mod_Rewrite cho phép bạn tạo ra những URL tùy chỉnh và đơn giản theo nhu cầu. Trên thực tế, URL thực tế có thể trông gần giống như sau:

http://www.gizmo.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

Hướng dẫn này sẽ trình bày về việc kích hoạt Mod_Rewrite, tạo và sử dụng trang .htaccess cần thiết, và thiết lập các quy tắc chuyển hướng URL.

Nếu bạn đang tìm cách xây dựng website và cần một máy chủ mạnh mẽ để áp dụng mod_rewrite, hãy tham khảo các gói mua VPS chất lượng cao tại DataOnline – giải pháp lý tưởng để vận hành website linh hoạt và bảo mật hơn.

Setup

Các bước trong hướng dẫn này yêu cầu người dùng có quyền root.

Ngoài ra, bạn cần cài đặt Apache trên máy chủ. Nếu chưa có, bạn có thể cài đặt cho Ubuntu bằng lệnh:

sudo apt-get install apache2

Phần 1 – Cách kích hoạt mod_rewrite

Trước khi bắt đầu tạo các quy tắc chuyển hướng URL thực sự, chúng ta cần kích hoạt module mod_rewrite của Apache điều khiển các quy tắc đó. Việc này rất đơn giản:

sudo a2enmod rewrite

Lệnh này sẽ kích hoạt module hoặc – nếu nó đã được kích hoạt – hiển thị thông báo “Module rewrite already enabled”.

Phần 2 – Về tệp .htaccess

Sau khi đã kích hoạt module, bạn có thể thiết lập các chuyển hướng URL của mình bằng cách tạo tệp .htaccess trong thư mục website.

Tệp .htaccess là một cách để cấu hình chi tiết của website mà không cần phải thay đổi các tệp cấu hình máy chủ. Dấu chấm ở đầu tên tệp sẽ giúp tệp này ẩn bên trong thư mục.

Ngoài ra, vị trí đặt tệp .htaccess rất quan trọng. Các cấu hình trong tệp đó sẽ ảnh hưởng đến tất cả các nội dung trong thư mục của nó và các thư mục con bên dưới.

Bạn có thể tạo tệp .htaccess bằng một trình soạn thảo văn bản (chắc chắn phải đặt tên là chỉ .htaccess mà không có phần mở rộng hay tên khác) và sau đó tải nó lên trang web của bạn qua một ứng dụng FTP.

Ngoài ra, bạn có thể sử dụng lệnh sau, thay thế example.com bằng tên trang web của bạn, để tạo tệp .htaccess trong terminal:

sudo nano /var/www/example.com/.htaccess

Cách cho phép thay đổi trong tệp .htaccess

Để cho phép tệp .htaccess ghi đè các cấu hình mặc định của website, bạn hãy bắt đầu bằng cách mở tệp cấu hình. Lưu ý: Bạn cần quyền sudo cho bước này.

sudo nano /etc/apache2/sites-available/default

Sau khi vào tệp, tìm phần sau và thay đổi dòng có chữ AllowOverride từ None thành All. Phần này sẽ trông như sau:

<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>

Sau khi lưu và thoát tệp, hãy khởi động lại Apache. Các tệp .htaccess bây giờ sẽ khả dụng cho tất cả các trang web của bạn.

sudo service apache2 restart

Giờ đây, bạn đã sẵn sàng để chuyển hướng các URL của trang web.

Phần 3 – Cách chuyển hướng URL

Toàn bộ quá trình chuyển hướng URL diễn ra trong tệp .htaccess.

Nhìn chung, tất cả các lệnh chuyển hướng URL đều theo cùng một mẫu:

RewriteRule Pattern Substitution [OptionalFlags]
Dưới đây là giải thích ngắn gọn về từng phần:
  • RewriteRule: Đây là phần mà bạn có thể viết tên của chỉ thị mod_rewrite mà bạn muốn sử dụng.

  • Pattern: Phần này dùng để diễn giải URL yêu cầu, sử dụng biểu thức chính quy. Hướng dẫn này không bàn sâu về biểu thức chính quy, nhưng bạn có thể tìm một hướng dẫn hữu ích về chủ đề này tại đây.

  • Substitution: Đây là URL thực tế của trang chứa thông tin mà chúng ta muốn hiển thị. Nó có thể khó nhớ hoặc gây nhầm lẫn do các tham số PHP hoặc chuỗi số dài, ví dụ: www.cityzoo.com/animals.php?mammals=seals.

  • Optional Flags: Một flag là một tham số ở cuối lệnh RewriteRule có thể thay đổi hành vi của biểu thức. Một số tham số phổ biến bao gồm:

    • [F]: làm cho URL bị cấm.

    • [NC]: buộc quy tắc bỏ qua phân biệt chữ hoa chữ thường.

    • [R=301] hoặc [R=302]: kiểm soát mã chuyển hướng mà bạn muốn sử dụng.

    • [L]: chỉ ra rằng đây là quy tắc cuối cùng trong chuỗi.

Ba ví dụ chuyển hướng URL

Ví dụ 1: Đi đến Trang A, tìm Trang B

Đây là ví dụ cơ bản nhất về chuyển hướng URL: một khách truy cập gõ một URL vào trình duyệt nhưng lại được chuyển hướng đến URL khác. Dưới đây là cách thiết lập.

Giả sử bạn tạo hai trang riêng cho một website – ví dụ, một trang về Táo (apples.html) và một trang về Cam (oranges.html):

http://httpd.apache.org/docs/current/rewrite/intro.html

Sao chép mã sau vào trang Táo:

<html> <head> <title>Apples</title> </head> <body> <h1>This page is about Apples</h1> </body> </html>

Sau đó, bạn tạo trang Cam, thay thế tất cả tên trái cây cho phù hợp.

Bây giờ, mở tệp .htaccess:

sudo nano /var/www/example.com/.htaccess

Thêm các lệnh chuyển hướng URL sau vào tệp:

RewriteEngine on RewriteRule ^oranges.html$ apples.html

Lưu và thoát tệp.

Khi mọi thứ đã được thiết lập, hãy truy cập trang kết thúc bằng “/oranges.html” – tất cả thông tin hiển thị sẽ đến từ trang “/apples.html”.

Giải thích:

  • ^oranges.html: Phần này chỉ ra rằng URL phải bắt đầu bằng “oranges.html”. Dấu mũ (^) biểu thị đầu chuỗi. Nói cách khác – nếu URL cần chuyển hướng bắt đầu bằng điều gì đó khác “oranges” (ví dụ: navel_oranges.html), quy tắc sẽ không nhận diện được và sẽ không chuyển hướng đến apples.html.

  • $: Dấu đô la chỉ ra kết thúc của URL. Nếu có bất cứ ký tự nào sau chuỗi cuối cùng, trang web cũng sẽ không được nhận diện theo quy tắc chuyển hướng.

  • apples.html: Đây là nơi trình duyệt thực sự điều hướng lưu lượng truy cập.

Ví dụ 2: Website có tham số trong URL – Cách hiển thị như thư mục con

Ví dụ đầu tiên nói về một trang web chỉ cần thay thế bằng một trang khác. Trong trường hợp dưới đây, chúng ta gặp phải tình huống phổ biến khi URL có chứa tham số.

Xem URL sau:

http://example.com/results.php?products=apple

URL này sẽ rõ ràng hơn nếu hiển thị như:

http://example.com/products/apple

Các dòng trong tệp .htaccess sẽ như sau:

RewriteEngine on RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]

Giải thích:

  • ^products: Để URL được bắt và chuyển hướng, nó phải bắt đầu bằng “products” (chỉ xét phần sau tên miền). Nếu bắt đầu bằng điều gì khác, quy tắc sẽ không áp dụng và URL sẽ giữ nguyên.

  • ([A-Za-z0-9-]+): Phần trong ngoặc đơn biểu thị bất kỳ thông tin nào có thể được gõ vào URL. Nói cách khác, URL sẽ được chuyển hướng để phản ánh những gì khách truy cập gõ sau “/products/”.

  • +: Dấu cộng chỉ ra rằng nội dung trong ngoặc đơn có thể là một hoặc nhiều ký tự (không chỉ một ký tự đơn lẻ là chữ cái hoặc số).

  • /?$: Dấu chấm hỏi cho phép ký tự cuối cùng trong chuỗi là dấu gạch chéo (mặc dù không bắt buộc).

  • results.php?products=$1: $1 biểu thị vị trí mà chuỗi từ phần pattern sẽ được đưa vào. Nói cách khác, nó sẽ chèn thông tin được bắt từ phần “([A-Za-z0-9-]+)” vào URL thay thế.

  • [NC]: Tham số này chỉ ra rằng quy tắc sẽ bỏ qua phân biệt chữ hoa chữ thường.

Ví dụ 3: Website có URL phức tạp – Cách làm cho gọn gàng

Tình huống này thường xảy ra khi URL quá dài và phức tạp.

Hãy lấy ví dụ URL dưới đây:

http://example.com/results.php?products=produce&type=fruit&species=apple

Mặc dù URL này có hiệu quả trong việc cung cấp nội dung đúng, nhưng nó không dễ nhớ đối với người dùng. Chuyển hướng URL sẽ cho phép bạn chuyển đổi URL này thành dạng đơn giản và rõ ràng hơn:

http://example.com/produce/fruit/apple

Để thực hiện điều này, bạn cần thêm các dòng sau vào tệp .htaccess (bạn có thể thêm nhiều phần nếu cần):

RewriteEngine on RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

Giải thích:

  • ^: Dấu mũ chỉ ra bắt đầu của biểu thức.

  • (meat|produce|dairy): Nếu bạn muốn giới hạn các tùy chọn được nhập vào, bạn có thể chỉ định những giá trị duy nhất được chấp nhận – trong trường hợp này là các loại thực phẩm: meat, produce, hoặc dairy. Nếu nhập vào điều gì ngoài ba từ khóa này, chuyển hướng URL sẽ không xảy ra.

  • ([^/.]+): Phần này chỉ ra rằng bất kỳ thứ gì được gõ vào giữa các dấu gạch chéo, ngoại trừ dấu gạch chéo hoặc dấu chấm.

  • results.php?products=$1&type=$2&species=$3: Mỗi giá trị trong ngoặc đơn sẽ được trích xuất và áp dụng vào URL dài hơn trong phần thay thế. $1 chỉ ra giá trị thứ nhất, $2 giá trị thứ hai, $3 giá trị thứ ba.

Việc cấu hình mod_rewrite và .htaccess hiệu quả hơn khi bạn có quyền kiểm soát máy chủ. Nếu bạn chỉ cần thuê VPS giá rẻ để học tập hoặc vận hành web nhỏ, hãy khám phá các gói VPS tiết kiệm tại DataOnline ngay hôm nay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *