Hướng dẫn redirect tên miền từ www sang non-www bằng Apache trên CentOS 7

Hướng dẫn redirect tên miền từ www sang non-www bằng Apache trên CentOS 7

Khi phát triển website, nhiều lập trình viên muốn đảm bảo rằng người dùng có thể truy cập trang web của họ thông qua cả tên miền gốc (không có www) và tên miền có tiền tố www. Điều này có nghĩa là cả www.my-website.commy-website.com đều dẫn đến cùng một nội dung, mang lại trải nghiệm nhất quán cho người truy cập.

Mặc dù có nhiều phương pháp để triển khai, nhưng cách tối ưu nhất cho SEO là chọn một tên miền chính-có thể là tên miền gốc hoặc tên miền có www-và thiết lập máy chủ web để tự động chuyển hướng người dùng từ tên miền còn lại sang tên miền đã chọn.

Để đảm bảo quá trình này diễn ra hiệu quả và thân thiện với công cụ tìm kiếm, chuyển hướng 301 (Permanent Redirect) là lựa chọn tốt nhất. Khi máy chủ gửi phản hồi HTTP 301, trình duyệt và công cụ tìm kiếm sẽ hiểu rằng nội dung đã được di chuyển vĩnh viễn sang URL mới và tự động điều hướng người dùng đến địa chỉ đó. Quá trình này diễn ra nhanh chóng và không gây gián đoạn trải nghiệm duyệt web.

Tại sao không phục vụ cùng một nội dung trên cả hai tên miền?
Dù phương pháp này có vẻ đơn giản, nhưng nó không mang lại lợi ích SEO tối ưu. Chuyển hướng 301 giúp công cụ tìm kiếm nhận diện một phiên bản chính thức của trang web, tránh tình trạng nội dung trùng lặp và giúp cải thiện thứ hạng trên kết quả tìm kiếm.

DataOnline sẽ hướng dẫn bạn học cách cấu hình chuyển hướng 301 bằng Apache trên CentOS 7, giúp tối ưu hóa SEO và đảm bảo trải nghiệm người dùng tốt nhất.

Yêu cầu

Trước khi tiếp tục, bạn cần có:

Quyền Superuser trên máy chủ đang chạy Apache. Nếu chưa thiết lập, hãy tham khảo hướng dẫn Cấu hình máy chủ ban đầu với CentOS 7.

Apache đã được cài đặt và cấu hình để phục vụ trang web của bạn. Nếu chưa có, hãy làm theo hướng dẫn Cách cài đặt Apache Web Server trên CentOS 7.

Một tên miền đã đăng ký. Nếu chưa có, bạn có thể đăng ký miễn phí tại Freenom. Bạn có thể sử dụng bất kỳ nhà cung cấp DNS nào để quản lý bản ghi tên miền, miễn là trỏ đúng nameserver.

Bây giờ, chúng ta sẽ bắt đầu bằng cách cấu hình bản ghi DNS.

Bước 1 – Cấu hình bản ghi DNS

Trước tiên, bạn cần trỏ cả www.my-website.commy-website.com về máy chủ Apache của mình. (Trong hướng dẫn này, chúng ta giả định tên miền của bạn là my-website.com. Nếu bạn sử dụng tên miền khác, hãy thay thế nó trong quá trình thiết lập.) Bạn sẽ thực hiện việc này bằng cách tạo bản ghi A cho từng tên miền, trỏ đến địa chỉ IP của máy chủ Apache.

Truy cập bảng điều khiển DNS của nhà cung cấp dịch vụ. Hướng dẫn này sử dụng DataOnline DNS. Trong biểu mẫu Thêm tên miền, nhập tên miền đã đăng ký của bạn vào trường văn bản và nhấp vào Thêm Tên Miền. Sau đó, trang quản lý tên miền sẽ mở ra, cho phép bạn thêm, sửa hoặc xóa các bản ghi DNS.

Tiếp theo, tạo bản ghi A cho tên miền gốc (my-website.com) bằng cách nhập ký tự @ vào trường HOSTNAME (đây là ký hiệu đại diện cho tên miền gốc) và nhập địa chỉ IPv4 công khai của máy chủ Apache vào trường WILL DIRECT TO, sau đó nhấn Tạo Bản Ghi. (Không cần thay đổi TTL.)

Đối với www.my-website.com, bạn có thể sử dụng bản ghi CNAME để trỏ nó đến my-website.com, giúp các yêu cầu HTTP đến subdomain www tự động được chuyển đến máy chủ. Tuy nhiên, để đơn giản hóa, bạn chỉ cần tạo một bản ghi A khác giống như bản ghi đầu tiên, nhưng nhập www vào trường HOSTNAME và địa chỉ IP máy chủ vào trường WILL DIRECT TO, sau đó nhấn Tạo Bản Ghi.

Sau khi hoàn tất, cả www.my-website.commy-website.com sẽ trỏ về máy chủ Apache, đảm bảo tất cả lưu lượng truy cập đến đúng địa chỉ.

Sau khi hoàn tất, cả hai bản ghi sẽ giống như sau:

Thiet ke chua co ten 57

Bây giờ, các yêu cầu đến www.my-website.commy-website.com sẽ được chuyển đến máy chủ Apache. Tiếp theo, chúng ta sẽ cấu hình Apache.

Bước 2 – Cấu hình chuyển hướng trong Apache

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

  • mod_alias (dễ sử dụng, phù hợp cho các chuyển hướng đơn giản).
  • mod_rewrite (mạnh mẽ hơn, hỗ trợ biểu thức chính quy).

Do chúng ta chỉ cần chuyển hướng toàn bộ www sang non-www, mod_alias là lựa chọn phù hợp. Apache cũng khuyến khích dùng mod_alias nếu có thể, vì mod_rewrite có thể dẫn đến cấu hình phức tạp và khó bảo trì.

Kiểm tra xem mod_alias đã được bật chưa:

httpd -M | grep alias_module

Nếu xuất hiện dòng alias_module (shared), thì mô-đun đã được bật. Nếu chưa, kích hoạt bằng lệnh:

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

Với mod_alias đã được kích hoạt, bạn có thể sử dụng các chỉ thị như Redirect, RedirectMatch, và các chỉ thị khác được liệt kê trong tài liệu của mod_alias để cấu hình Apache.

Cấu hình VirtualHosts

Như đã đề cập trong phần Yêu cầu trước, bạn nên có sẵn cấu hình website trong Apache. Cấu hình này có thể nằm trong tệp cấu hình chính của Apache (/etc/httpd/conf/httpd.conf) hoặc trong một tệp riêng biệt (ví dụ: /etc/httpd/conf.d/my-website.com.conf).

Nếu bạn đã sử dụng hướng dẫn cài đặt Apache được liên kết trong phần Yêu cầu trước để thiết lập VirtualHosts, tệp cấu hình có thể nằm ở đường dẫn như /etc/httpd/sites-available/my-website.com.conf.

Dù tệp cấu hình của bạn nằm ở đâu, hãy mở tệp đó bằng vi hoặc trình chỉnh sửa yêu thích của bạn (nếu thích dùng nano, bạn có thể cài đặt nó bằng lệnh yum install nano):

Mở tệp cấu hình Apache:

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

Tìm trong VirtualHost bất kỳ dòng nào có chỉ thị ServerAlias. Nếu bạn thấy một dòng có ServerAlias được đặt thành www.my-website.com, hãy xóa dòng đó.

(Nếu dòng đó chứa nhiều bí danh (alias) trong một danh sách được phân tách bằng dấu phẩy, hãy chỉ xóa www.my-website.com khỏi danh sách.)

Bạn cần xóa alias này vì chúng ta sẽ tạo một VirtualHost riêng biệt cho subdomain www, trong đó chỉ chứa ServerName và Redirect. Điều này đảm bảo rằng VirtualHost chính của trang web sẽ không xử lý các yêu cầu đến www.my-website.com nữa.

Bây giờ, hãy tạo một VirtualHost trong một tệp riêng biệt (ví dụ: /etc/httpd/conf.d/www.my-website.com.conf).

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

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

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

Sau khi hoàn tất chỉnh sửa, hãy lưu và thoát khỏi tệp cấu hình.

Nếu bạn đã tạo tệp này trong thư mục /etc/httpd/sites-available/ (theo hướng dẫn cài đặt Apache), hãy tạo một liên kết tượng trưng (symlink) đến thư mục /etc/httpd/sites-enabled/ bằng lệnh sau:

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

Tệp VirtualHost mới này sẽ cấu hình Apache để gửi phản hồi chuyển hướng 301 (301 redirect) đến bất kỳ client nào yêu cầu truy cập www.my-website.com, và hướng họ đến my-website.com thay thế.

Chuyển hướng này bảo toàn đường dẫn yêu cầu gốc, nghĩa là nếu ai đó truy cập http://www.my-website.com/login.php, họ sẽ tự động được chuyển đến http://my-website.com/login.php mà không làm mất trang đích.

Lưu ý: Nếu VirtualHost chính của trang web chứa ServerAlias với wildcard subdomain (*.my-website.com), bạn nên cân nhắc loại bỏ nó và tạo một VirtualHost riêng biệt cho từng subdomain mà bạn muốn chuyển hướng. Nếu bạn không muốn chuyển hướng tất cả các subdomain và cần một số subdomain vẫn được phục vụ bởi VirtualHost chính, tốt nhất nên khai báo từng subdomain một cách rõ ràng. Điều này đặc biệt quan trọng khi bạn có một subdomain như www.my-website.com, mà bạn không muốn bị xử lý nhầm bởi VirtualHost chính. Bạn có thể khai báo mỗi subdomain trên một dòng ServerAlias riêng hoặc liệt kê tất cả trên một dòng, cách nhau bằng dấu phẩy.

Nếu bạn vẫn cần giữ ServerAlias cho *.my-website.com, hãy đảm bảo rằng Apache tải VirtualHost www trước VirtualHost chính. Nếu VirtualHost chính được tải trước, Apache sẽ xử lý www.my-website.com bằng wildcard alias. Để kiểm tra thứ tự tải của VirtualHost, chạy lệnh:

httpd -S

Tìm các dòng có chứa namevhost my-website.comnamevhost www.my-website.com. Nếu www.my-website.com xuất hiện trước, thì bạn đã cấu hình đúng. Nếu VirtualHost cho my-website.com xuất hiện trước, bạn có thể ép Apache tải www.my-website.com trước bằng cách:

  1. Di chuyển dòng Include trong tệp cấu hình chính

    • Nếu VirtualHost chính nằm trong /etc/httpd/conf/httpd.conf và sử dụng Include hoặc IncludeOptional để nạp thư mục chứa VirtualHost www, hãy di chuyển dòng Include đó lên trước VirtualHost chính.

  2. Đổi tên tệp cấu hình để ưu tiên thứ tự tải

    • Nếu cả VirtualHost chính và VirtualHost www nằm trong /etc/httpd/conf.d/, hãy đổi tên tệp để Apache tải www trước:

      Nếu VirtualHost chính của bạn được cấu hình trong một tệp (ví dụ: /etc/httpd/conf/httpd.conf) và sử dụng chỉ thị Include hoặc IncludeOptional để nạp thư mục chứa VirtualHost www, bạn chỉ cần di chuyển dòng Include đó lên trước VirtualHost chính trong tệp cấu hình.

      Nếu cả VirtualHost chính và VirtualHost www nằm trong cùng một thư mục (ví dụ: /etc/httpd/conf.d/), bạn có thể ép Apache tải www trước bằng cách đổi tên tệp cấu hình, thêm tiền tố số thứ tự. Hãy đổi tên tệp www VirtualHost thành 01-www.my-website.com.conf và tệp VirtualHost chính thành 02-my-website.com.conf, như sau:mv /etc/httpd/conf.d/www.my-website.com.conf /etc/httpd/conf.d/01-www.my-website.com.conf
      mv /etc/httpd/conf.d/my-website.com.conf /etc/httpd/conf.d/02-my-website.com.conf

      Sau đó, chạy lại lệnh:httpd -S

      Kiểm tra xem www VirtualHost đã xuất hiện trước hay chưa để đảm bảo Apache xử lý đúng thứ tự tả

Lưu và thoát tệp. Sau đó, khởi động lại Apache:

sudo systemctl restart httpd

Trước khi truy cập www.my-website.com trên trình duyệt, hãy thử gửi một yêu cầu bằng curl trên máy chủ hoặc máy tính cá nhân của bạn (nếu curl đã được cài đặt):

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

Tham số -I yêu cầu curl chỉ hiển thị header từ phản hồi của máy chủ. Tham số -L yêu cầu curl theo dõi chuyển hướng (redirect), tự động gửi yêu cầu thứ hai đến URL mới được chỉ định trong header Location (giống như cách trình duyệt hoạt động). Vì bạn đã thiết lập 301 redirect, curl sẽ thực hiện hai yêu cầu và phản hồi nhận được sẽ giống như sau:

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

Trong phản hồi 301 (Moved Permanently) từ yêu cầu ban đầu đến http://www.my-website.com, hãy chú ý dòng quan trọng:Location: http://my-website.com

Yêu cầu thứ hai của curl đã tự động chuyển hướng đến http://my-website.com, và nếu website của bạn hoạt động bình thường, máy chủ sẽ phản hồi với mã trạng thái 200 OK.

Bây giờ, hãy truy cập http://www.my-website.com trên trình duyệt. Nếu bạn không để ý, việc chuyển hướng sẽ diễn ra trong nháy mắt!

Website vẫn hiển thị như bình thường, nhưng hãy quan sát kỹ thanh địa chỉ – phần “www” đã biến mất. Hầu hết người dùng sẽ không nhận ra sự thay đổi này, và trải nghiệm của họ vẫn giống như khi truy cập http://my-website.com.

Kết luận

Qua hướng dẫn trên, bạn đã thiết lập thành công hai bản ghi DNS để trỏ www.my-website.commy-website.com về máy chủ Apache. Đồng thời, bạn đã cấu hình Apache VirtualHost để thực hiện chuyển hướng từ www sang non-www bằng mod_alias, đảm bảo tính nhất quán cho URL và tối ưu SEO. Cuối cùng, bạn đã kiểm tra và xác nhận rằng quá trình chuyển hướng hoạt động chính xác, giúp người dùng truy cập trang web một cách mượt mà và hiệu quả.

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