Hướng dẫn cấu hình 301 Redirect từ www sang non-www trên Apache (CentOS 7)

1. Giới thiệu

Nhiều nhà phát triển web cần cung cấp trải nghiệm truy cập thống nhất cho người dùng khi sử dụng cả hai tên miền: có “www” và không có “www”. Ví dụ, người dùng truy cập www.my-website.commy-website.com sẽ nhận được cùng một nội dung.

Giải pháp tốt nhất về SEO là chọn một tên miền chính (www hoặc không www) và cấu hình máy chủ web để chuyển hướng người dùng từ tên miền phụ sang tên miền chính. Chuyển hướng 301 Redirect được khuyến nghị trong trường hợp này, giúp thông báo cho trình duyệt và công cụ tìm kiếm rằng URL đã chuyển vĩnh viễn đến một địa chỉ mới.

Tại sao không cấu hình máy chủ web phục vụ cả hai tên miền cùng lúc? Việc này có vẻ đơn giản nhưng không mang lại lợi ích SEO. Chuyển hướng 301 giúp công cụ tìm kiếm nhận biết một URL chuẩn (canonical), tăng xếp hạng SEO của URL đó.

Trong bài viết này, bạn sẽ học cách cấu hình 301 Redirect trên Apache trong CentOS 7.

2. Yêu cầu trước khi thực hiện

Để thực hiện, bạn cần chuẩn bị:

  • Quyền quản trị viên (superuser) trên máy chủ chạy Apache
  • Apache đã được cài đặt và cấu hình để phục vụ website
  • Tên miền đã đăng ký và được trỏ đến máy chủ. Bạn có thể đăng ký tên miền miễn phí tại Freenom hoặc sử dụng nhà cung cấp DNS bất kỳ. Đảm bảo tên miền đã trỏ về máy chủ DNS của nhà cung cấp dịch vụ.

3. Các bước thực hiện

Bước 1:

Trước tiên, cần tạo bản ghi DNS để trỏ www.my-website.commy-website.com đến máy chủ Apache. Ví dụ dưới đây minh họa với DigitalOcean DNS:

  1. Truy cập bảng điều khiển của nhà cung cấp DNS.
  2. Thêm bản ghi A cho tên miền gốc:
    Hostname: @
    Will Direct To: IP máy chủ Apache.
  3. Thêm bản ghi A cho tên miền phụ:
    Hostname: www
    Will Direct To: IP máy chủ Apache.

Khi hoàn tất, cả hai tên miền sẽ trỏ đến máy chủ Apache.

Bước 2:

Apache hỗ trợ hai module để thiết lập chuyển hướng:

  • mod_alias: Đơn giản, dễ sử dụng, phù hợp cho các trường hợp cơ bản.
  • mod_rewrite: Linh hoạt, hỗ trợ biểu thức chính quy, nhưng phức tạp hơn.

mod_alias được khuyến nghị nếu chỉ cần chuyển hướng toàn bộ yêu cầu từ www sang non-www.

1. Xác minh mod_alias

Chạy lệnh sau để kiểm tra module đã được kích hoạt:

httpd -M | grep alias_module

Nếu chưa được kích hoạt, thêm dòng sau vào tệp cấu hình:

echo "LoadModule alias_module modules/mod_alias.so" | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

2. Cập nhật VirtualHost

Mở tệp cấu hình VirtualHost chính của website (ví dụ: /etc/httpd/conf.d/my-website.com.conf) và đảm bảo không có ServerAlias www.my-website.com. Sau đó, chạy lệnh sau để tạo VirtualHost mới để xử lý yêu cầu từ www:

sudo vi /etc/httpd/conf.d/www.my-website.com.conf

Dán nội dung sau vào tệp, thay thế my-website.com bằng tên miền của bạn:

<VirtualHost *:80>
    ServerName www.my-website.com
    Redirect permanent / http://my-website.com/
</VirtualHost>

Lưu và thoát. Nếu sử dụng thư mục sites-available, tạo liên kết biểu tượng:

sudo ln -s /etc/httpd/sites-available/www.my-website.com.conf /etc/httpd/sites-enabled/

3. Kiểm tra thứ tự VirtualHost

Nếu VirtualHost chính chứa wildcard *.my-website.com, cần đảm bảo VirtualHost cho www được Apache tải trước. Sử dụng lệnh sau để kiểm tra:

httpd -S

Nếu cần thiết, đổi tên tệp cấu hình bằng cách thêm tiền tố số, ví dụ:

  • 01-www.my-website.com.conf
  • 02-my-website.com.conf

Khởi động lại Apache:

sudo systemctl restart httpd

4. Kiểm tra chuyển hướng

Sử dụng curl để xác minh:

curl -IL http://www.my-website.com

Kết quả sẽ hiển thị mã trạng thái 301 Moved Permanently và URL chuyển hướng đến my-website.com.

Output
HTTP/1.1 301 Moved Permanently
Date: Tue, 03 Jan 2023 19:24:44 GMT
Server: Apache/2.4.53
Location: http://my-website.com/
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 200 OK
Date: Tue, 03 Jan 2023 19:24:44 GMT
Server: Apache/2.4.53
Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT
ETag: "39-5eecb7ed6bfc9"
Accept-Ranges: bytes
Content-Length: 57
Content-Type: text/html; charset=UTF-8

5. Kết luận

Trong bài viết này, bạn đã:

  • Thêm bản ghi DNS cho website.
  • Cấu hình Apache để chuyển hướng 301 từ www sang non-www.

Việc chuyển hướng này giúp cải thiện SEO và mang lại trải nghiệm truy cập thống nhất cho người dùng.

Để 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 *

Lên đầu trang