NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
23/05/2023
Lượt xem

Hướng dẫn cách thiết lập mod_rewrite cho Apache trên CentOS 7

23/05/2023
16 phút đọc
Lượt xem

Đánh giá

5/5 - (150 bình chọn)

Apache là một web server module cho phép bạn tùy chỉnh các tính năng nhanh chóng bằng cách bật và tắt các module. Từ đó giúp quản trị viên thiết lập các tính năng cho phù hợp với nhu cầu sử dụng. Trong bài viết này, bạn sẽ được hướng dẫn thiết lập mod_rewrite cho Apache trên CentOS 7 đơn giản và nhanh chóng.

Bước 1: Cài đặt Server Apache

Trước khi thực hiện bước này, bạn cần một máy chủ CentOS 7 với non-root user có đặc quyền sudo.

Bạn sẽ cài đặt Apache bằng lệnh sau:

$ sudo yum install httpd

Khi có thông báo Is this ok [yd/N], hãy nhập Y và nhấn ENTER để cho phép cài đặt.

Tiếp theo, khởi động daemon Apache, một tiến trình độc lập tạo ra một nhóm các tiến trình con hoặc thread để xử lí các yêu cầu, với tiện ích systemctl:

$ sudo systemctl start httpd

Kiểm tra trạng thái của Apache để đảm bảo nó đã khởi động thành công:

$ sudo systemctl status httpd

Bạn sẽ nhận được output sau:

. . .
systemd[1]: Starting The Apache HTTP Server...
systemd[1]: Started The Apache HTTP Server.

Khi đã hoàn thành thiết lập và kích hoạt, bạn hãy tìm hiểu về các module của Apache.

Bước 2: Xác minh mod_rewrite

Kể từ phiên bản CentOS 7, module mod_rewrite của Apache mặc định luôn được bật. Bạn sẽ xác minh lại xem bằng cách chạy lệnh sau:

$ httpd -M

Output nhận được như sau:

 . . .
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 . . .

Nếu rewrite_module không xuất hiện trong output, hãy chạy lệnh sau:

$ sudo vi /etc/httpd/conf.modules.d/00-base.conf

Khi file text được mở, hãy nhập i để vào chế độ insert, sau đó thêm hoặc vô hiệu dòng LoadModule rewrite_module modules/mod_rewrite.so:

#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
. . .
LoadModule rewrite_module modules/mod_rewrite.so
. . .

Nhấn ESC để rời khỏi mode insert, sau đó gõ :x rồi nhấn ENTER để lưu và thoát file.

Tiếp theo, áp dụng thay đổi cấu hình bằng cách khởi động lại Apache:

$ sudo systemctl restart httpd

Sau khi đã cài đặt Apache và kích hoạt module mod_rewrite, bạn sẽ thực hiện cấu hình .htaccess file.

Bước 3: Thiết lập file .htaccess

.htaccess file cho phép xác định các directive cho Apache trên mỗi domain mà không làm thay đổi các file cấu hình máy chủ, bao gồm RewriteRule. Trong Linux, các file có dấu chấm (.) ở phía trước được coi là file ẩn.

Trước khi sử dụng .htaccess file, bạn cần cập nhật cài đặt AllowOverride để có thể overwrite (ghi đè) lên các directive của Apache:

$ sudo vi /etc/httpd/conf/httpd.conf

Xác định vị trí của phần <Directory/var/www/html> và thay đổi directive AllowOverride từ None sang All:

. . .
<Directory /var/www/html>
. . .
 # 
 # AllowOverride controls what directives may be placed in .htaccess files.
 # It can be "All", "None", or any combination of the keywords:
 # Options FileInfo AuthConfig Limit
 #
 AllowOverride All
. . .
</Directory>
. . .

Lưu và thoát file rồi khởi động lại Apache để áp dụng thay đổi:

$ sudo systemctl restart httpd

Tiếp theo, chạy lệnh sau:

$ sudo vi /var/www/html/.htaccess

Thêm dòng sau vào đầu file để kích hoạt RewriteEngine:

RewriteEngine On

Lưu và thoát file.

Sau khi đã có một file .htaccess giúp xác định các quy tắc để thao tác các URL khi cần, bạn hãy tìm hiểu về những cú pháp mod_rewrite cơ bản.

Lưu ý: Để có quyền truy cập file ẩn .htaccess cũng như thực hiện các thao tác với mod_rewrite, bạn cần đảm bảo rằng có toàn quyền quản trị máy chủ và không bị giới hạn truy cập. Một giải pháp tốt để đảm bảo quyền truy cập và quản trị máy chủ là sử dụng VPS của Vietnix – một trong những dịch vụ VPS tốt nhất trên thị trường Việt Nam hiện nay.

Với VPS NVMe, bạn sẽ không còn phải lo lắng về việc không thể truy cập vào các tệp quan trọng hoặc không thể thực hiện các thay đổi cần thiết trên hệ thống của mình. Bên cạnh đó, VPS Vietnix còn cung cấp các tính năng sao lưu dữ liệu và hỗ trợ 24/7 để đảm bảo website của bạn luôn an toàn và vận hành ổn định. Bạn có thể lựa chọn giữa các gói VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU sao cho phù hợp với nhu cầu sử dụng.

Liên hệ để được tư vấn chi tiết nhất.

Bước 4: Tìm hiểu cú pháp rewrite rule

Directive RewriteRule cho phép bạn ánh xạ lại (remap) yêu cầu tới Apache dựa trên URL. Một file .htaccess có thể chứa từ hai rewrite rule trở lên, nhưng trong thời gian chạy, Apache chỉ áp dụng các quy tắc theo thứ tự đã xác định. Rewrite rule sẽ có cấu trúc như sau:

RewriteRule  Pattern  Substitution  [Flags]

  • RewriteRule: Chỉ định directive cho RewriteRule.
  • Pattern: Sử dụng đối chiếu PCRE (Perl Compatible Regular Expression) khớp với chuỗi mong muốn.
  • Substitution: Nơi gửi các yêu cầu phù hợp.
  • [Flags]: Tham số tùy chọn để sửa đổi quy tắc. Để biết thêm về ý nghĩa của các flag có sẵn, hãy xem tài liệu Rewrite Flags của Apache.

Sau khi tìm hiểu về cú pháp RewriteRule, hãy chuyển sang cú pháp RewriteCond.

Bước 5: Tìm hiểu cú pháp rewrite cond

Directive RewriteCond cho phép bạn thêm các điều kiện vào RewriteRule. Một rewrite condition có cấu trúc như sau: RewriteCond  TestString  Condition  [Flags]

  • RewriteCond: Directive lệnh RewriteCond.
  • TestString: Chuỗi để kiểm tra.
  • Condition: Một pattern phù hợp.
  • [Flags]: Tham số tùy chọn để sửa đổi điều kiện.

Directive RewriteCond không cho phép Apache xem xét bất kì rewrite rule nào trừ khi điều kiện cụ thể được đánh giá là đúng.

Bước 6: Thiết lập file

Bạn sẽ thiết lập rewrite rule cơ bản để cho phép người dùng truy cập trang about.html mà không cần nhập phần mở rộng .html vào thanh địa chỉ của trình duyệt web. Bắt đầu bằng cách tạo một file about.html trong thư mục gốc của tài liệu:

$ sudo vi /var/www/html/about.html

Sao chép mã HTML vào file:

<!DOCTYPE html>
<html>
    <head>
        <title>About Us</title>
    </head>
    <body>
        <h1>About Us</h1>
    </body>
</html>

Lưu và thoát file.

Trong trình duyệt web, thực hiện truy cập địa chỉ sau:

http://server_domain_or_IP/about.html

Bạn sẽ nhận được một trang trắng với nội dung About Us. Nếu xóa .html khỏi thanh địa chỉ và tải lại trang, bạn sẽ gặp lỗi 404 Not Found. Apache chỉ có thể truy cập theo tên file đầy đủ, nhưng bạn có thể thay đổi bằng cách sử dụng rewrite rule.

Bước 7: Thiết lập rewrite rule

Nếu muốn người dùng truy cập vào trang About Us mà không cần nhập đuôi .html, bạn sẽ cần tạo một quy tắc riêng. Bắt đầu bằng cách mở file .htaccess:

$ sudo vi /var/www/html/.htaccess

Sau dòng RewriteEngine On, thêm vào dòng sau:

RewriteRule ^about$ about.html [NC]

Lưu và thoát file.

Giờ đây bạn có thể truy cập vào trang About Us bằng URL http: // server_domain_or_IP/about.

Kiểm tra rewrite rule:

^about$ đóng vai trò là pattern khớp với URL và user nhập vào trình duyệt. Hướng dẫn này sử dụng một vài metacharacter (siêu kí tự) như sau:

  • ^ cho biết điểm bắt đầu của URL, sau đó server_domain_or_IP bị loại bỏ.
  • & là kết thúc của URL.

about.html hiển thị đường dẫn đến file mà Apache phục vụ khi gặp pattern phù hợp.

[NC] là cờ hướng dẫn rewrite rule không phân biệt chữ hoa, chữ thường để người dùng có thể nhập cả chữ hoa và chữ thường vào URL. Ví dụ, các URL sau đều trỏ đến file about.html:

  • server_domain_or_IP/about
  • server_domain_or_IP/About
  • server_domain_or_IP/ABOUT

Một số ví dụ mẫu về rewrite rule

Khi đã hiểu cơ bản về các rewrite rule, bạn sẽ xem hai ví dụ trong phần này để nắm rõ hơn về cách thực hiện:

Ví dụ 1: Đơn giản hóa chuỗi truy vấn bằng rewrite rule

Các ứng dụng web thường sử dụng các chuỗi truy vấn, được thêm vào một URL bằng cách sử dụng kí tự ? và phân tách bằng kí tự &. Apache bỏ qua hai kí tự này khi khớp các rewrite rule. Tuy nhiên, đôi khi vẫn cần các chuỗi truy vấn để truyền dữ liệu giữa các trang. Ví dụ, URL cho trang tìm kiếm kết quả viết bằng PHP như sau:

http://example.com/results.php?item=shoes&type=women

Thay vào đó, bạn có thể sử dụng URL khác như sau:

http://example.com/shoes/women

Bạn có thể sử dụng hai cách để đạt được kết quả trên, bằng cách sử dụng tùy chọn thay thế hoặc kết hợp đơn giản.

Thay thế đơn giản

Bạn sẽ tạo một rewrite rule để đơn giản hóa một URL truy vấn dài:

RewriteRule ^shoes/women$ results.php?item=shoes&type=women

Tùy chọn kết hợp

Trong một số trường hợp, bạn có thể khái quát hóa chuỗi truy vấn bằng cách sau:

  • Chỉ định một loạt các tùy chọn bằng cách sử dụng |, toán tử Boolean “OR”.
  • Nhóm đối sánh bằng cách sử dụng (), sau đó tham chiếu nhóm bằng biến $1, với 1 cho nhóm đầu tiên.

Rewrite rule trở thành:

RewriteRule ^shoes/(men|women|youth) results.php?item=shoes&type=$1

Quy tắc được hiển thị ở trên khớp với một URL shoes/ với phần theo sau là một type cụ thể. URL ban đầu được sửa đổi từ:

http://example.com/shoes/men

Thành:

http://example.com/results.php?item=shoes&type=men

Tùy chọn này cho phép Apache đánh giá một pattern mà không phải tạo rewrite rule riêng cho từng mẫu.

Khớp các bộ kí tự

Khi muốn chỉ định bất kì mục nào, không chỉ giới hạn ở mục /shoes, bạn có thể làm như sau:

  • Viết một regular expression khớp với tất cả các kí tự chữ và số. Biểu thức trong ngoặc [] khớp với bất kì kí tự nào bên trong và + khớp với số lượng kí tự được chỉ định.
  • Nhóm kết quả phù hợp và tham chiếu với tư cách là biến $2 trong file.
RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2

Ví dụ trên sẽ chuyển đổi:

http://example.com/pants/men

Thành:

http://example.com/results.php?item=pants&type=men

Bạn đã mở rộng thành công khả năng đối sánh bao gồm nhiều dạng của một URL.

Truyền chuỗi truy vấn

Cũng vẫn sử ví dụ trên, tuy nhiên trong trường hợp này, bạn muốn chuyển hướng http:// example.com/pants/men nhưng vẫn muốn thêm một chuỗi truy vấn bổ sung ?page=2. Lúc này, bạn sẽ ánh xạ URL sau:

http://example.com/pants/men?page=2

Đến:

http://example.com/results.php?item=pants&type=men&page=2

Nếu bạn cố gắng truy cập URL bằng cài đặt hiện tại thì sẽ thấy chuỗi truy vấn page=2 bị mất. Điều này có thể khắc phục bằng cách sử dụng cờ bổ sung QSA để kết hợp chúng. Sửa đổi rewrite rule như sau:

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2 [QSA]

Ví dụ 2: Thêm điều kiện bằng logic

Bây giờ bạn sẽ sử dụng directive RewriteCond. Nếu một rewrite condition được đánh giá là đúng, Apache sẽ xem xét RewriteRule kèm theo theo sau đó.

Trang mặc định

Ở trên, bạn đã thấy Apache xử lí yêu cầu về một URL không hợp lệ bằng cách cung cấp trang 404 Not Found. Tuy nhiên, thay vì hiển thị trang này thì bạn có thể chuyển hướng tất cả các URL sai định dạng về trang chủ. Đầu tiên kiểm tra xem file được yêu cầu có tồn tại hay không:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/home

Lệnh trên sẽ chuyển hướng từ /admin/random_text thành /admin/home.

Rule trên quy định như sau:

  • %{REQUEST_FILENAME}: Kiểm tra chuỗi được yêu cầu.
  • Toán tử !-f : Nếu filename được yêu cầu không tồn tại thì hãy thực hiện rewrite rule sau.
  • RewriteRule chuyển hướng các yêu cầu trở lại /admin/home.

Tạo rule ErrorDocument để trỏ lỗi 404 về trang error.html:

ErrorDocument 404 /error.html

Như vậy bất kỳ request nào dẫn đến phản hồi HTTP 404 đều sẽ được rule trên chuyển hướng về trang error.html

Hạn chế địa chỉ IP

Một RewriteCond có thể sử dụng để cho phép truy cập vào trang web bằng một địa chỉ IP cụ thể.

Lệnh dưới đây chặn lưu lượng từ mọi nơi ngoại trừ 198.51.100.24:

RewriteCond %{REMOTE_ADDR} !^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Quy tắc trên chỉ rằng nếu địa chỉ IP yêu cầu tài nguyên không phải là 198.51.100.24 thì không cho phép truy cập.

Nói ngắn gọn như sau:

  • %{REMOTE_ADDR}: Là chuỗi địa chỉ IP.
  • !^(198\.51\.100\.24)$: Phủ nhận địa chỉ IP (tạm hiểu là khác với giá trị này). Dấu gạch chéo \ này để ngăn kích hoạt phần . mở rộng.
  • Cờ F cấm truy cập và cờ L chỉ ra rằng đây là quy tắc đặt cuối cùng để chạy.

Nếu bạn muốn chặn quyền truy cập từ địa chỉ cụ thể, hãy sử dụng cách sau:

RewriteCond %{REMOTE_ADDR} ^(198\.51\.100\.24)$
RewriteRule (.*) - [F,L]

Mặc dù bạn có thể sử dụng các phương pháp khác để chặn hoặc cho phép lưu lượng truy cập vào trang web của mình nhưng thiết lập hạn chế trong file .htaccess là cách đơn giản nhất để đạt được những kết quả này.

Với hơn 10 năm kinh nghiệm trong lĩnh vực cung cấp giải pháp lưu trữ VPS, Vietnix đã phục vụ cho hơn 50.000 khách hàng cá nhân, doanh nghiệp, tiêu biểu như GTV, UB Group, iVIVU, SEOSONA, SAGO Media. Kể từ khi thành lập, Vietnix đã kích hoạt hơn 100.000 dịch vụ và giành được giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022 nhờ những cống hiến không ngừng nghỉ của mình.

Vietnix cam kết mang đến cho khách hàng của mình những giải pháp hiệu quả và chất lượng, với đội ngũ kỹ thuật viên chuyên nghiệp, luôn sẵn sàng hỗ trợ khách hàng 24/7. Với vị thế một trong những nhà cung cấp giải pháp VPS hàng đầu tại Việt Nam, Vietnix luôn cập nhật công nghệ mới nhất và nâng cao chất lượng dịch vụ của mình để đáp ứng nhu cầu ngày càng cao của khách hàng. Hãy để Vietnix đồng hành cùng sự thành công của bạn trên con đường kinh doanh trực tuyến.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093 – 07 088 44444
  • Email: sales@vietnix.com.vn

Lời kết

Trong hướng dẫn này, bạn đã sử dụng một file .htaccess để làm việc với các directive RewriteRuleRewriteCond. Đây là một thành phần vô cùng quan trọng trên web server Apache để hỗ trợ bạn thực hiện các hoạt động khác. Chúc bạn cài đặt thành công và nếu gặp phải khó khăn nào, hãy để lại bình luận bên dưới để được hỗ trợ nhanh chóng nhất.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Black Friday Hosting & VPS

Chương trình kết thúc sau

Giảm giá 40% hosting VPS

50 coupon mỗi ngày

Gia hạn giá không đổi

NHẬN DEAL NGAY
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG