Thứ hai, 04/05/2015 | 00:00 GMT+7

Cách chuyển hướng www thành không có www bằng Apache trên CentOS 7

Khi bạn cài đặt trang web hoặc ứng dụng của bạn và chạy sau một domain , bạn cũng nên cho phép user của bạn truy cập vào nó thông qua domain thuần túy domain phụ www . Nghĩa là, họ sẽ có thể truy cập domain của bạn có hoặc không có “ www. Tiền tố ”, ví dụ: example.com hoặc www.example.com , trong trình duyệt web và được trình bày với cùng một nội dung. Mặc dù có nhiều cách khác nhau để cài đặt điều này, nhưng giải pháp tốt nhất, đảm bảo tính nhất quán và cân nhắc SEO, là chọn domain bạn thích, đơn giản hoặc www và chuyển hướng domain kia đến domain ưa thích. Loại chuyển hướng này được gọi là Chuyển hướng vĩnh viễn hoặc “chuyển hướng 301” và có thể dễ dàng cài đặt bằng cách cấu hình đúng các bản ghi tài nguyên DNS và phần mềm web server của bạn.

Hướng dẫn này sẽ chỉ cho bạn cách chuyển hướng một URL có www sang không phải www, ví dụ: www.example.com đến example.com , với Apache trên CentOS 7. Ta cũng sẽ chỉ cho bạn cách chuyển hướng theo hướng khác, từ không www URL thành www . Phiên bản Ubuntu 14.04 của hướng dẫn này có sẵn tại đây .

Nếu bạn muốn thực hiện loại chuyển hướng này với Nginx làm web server của bạn , thay vào đó bạn nên làm theo hướng dẫn này: Cách chuyển hướng www thành không có www với Nginx trên CentOS 7 .

Yêu cầu

Hướng dẫn này giả định bạn có quyền superuser, tức là sudo hoặc root, trên server đang chạy Apache. Nếu bạn chưa cài đặt , hãy làm theo hướng dẫn này: Cài đặt server ban đầu trên CentOS 7 .

Giả định bạn đã cài đặt Apache (httpd). Nếu bạn chưa cài đặt điều này, có một số hướng dẫn về chủ đề này dưới thẻ Apache .

Bạn phải có thể thêm các bản ghi vào DNS đang quản lý domain của bạn. Nếu bạn chưa có domain , bạn có thể mua một domain từ công ty đăng ký domain và quản lý domain đó bằng DNS của công ty đăng ký domain hoặc DNS của DigitalOcean . Trong hướng dẫn này, ta sẽ sử dụng DNS DigitalOcean để tạo các bản ghi cần thiết.

Hãy bắt đầu bằng cách cấu hình các bản ghi DNS của bạn.

Cấu hình bản ghi DNS

Để cài đặt chuyển hướng mong muốn, www.example.com đến example.com hoặc ngược lại, bạn phải có bản ghi A cho mỗi tên.

Mở bất kỳ thứ gì bạn sử dụng để quản lý DNS của bạn . Đối với ví dụ của ta , ta sẽ sử dụng DNS DigitalOcean .

Nếu một bản ghi domain ( còn gọi là vùng) chưa tồn tại, hãy tạo một bản ghi ngay bây giờ. Tên server lưu trữ phải là domain của bạn, ví dụ: example.com và địa chỉ IP phải được đặt thành địa chỉ IP công cộng của server Apache của bạn. Thao tác này sẽ tự động tạo bản ghi A trỏ domain của bạn đến địa chỉ IP mà bạn đã chỉ định. Nếu bạn đang sử dụng một hệ thống khác để quản lý domain của bạn , bạn có thể cần thêm hệ thống này theo cách thủ công.

Tiếp theo, thêm một bản ghi A khác có “www” làm tên server (hoặc “ www.example.com ” nếu một phần domain phụ không hoạt động) và chỉ định cùng một địa chỉ IP.

Khi bạn đã tạo cả hai bản ghi, nó sẽ trông giống như sau:

Hồ sơ A bắt buộc

Lưu ý: Điều này cũng sẽ hoạt động với các bản ghi CNAME, miễn là bản ghi A của tên chuẩn đề cập đến địa chỉ IP của web server Apache của bạn.

Bây giờ server của bạn có thể truy cập được thông qua domain www và không phải www, nhưng ta vẫn cần cài đặt chuyển hướng. Ta sẽ làm điều đó ngay bây giờ.

Bật module ghi lại Apache

Để thực hiện chuyển hướng 301, ta sẽ sử dụng module Apache mod_rewrite , hoặc Rewrite,. Làm như vậy sẽ đảm bảo user của bạn có thể truy cập trang web có hoặc không có www. tiền tố và được chuyển hướng đến domain bạn muốn.

Mô-đun Viết lại, trên CentOS 7, được bật theo mặc định. Nếu nó không được bật, vì lý do nào đó, hãy đảm bảo thêm dòng này vào phần module của cấu hình Apache của bạn (nằm trong /etc/httpd/conf.modules.d/00-base.conf theo mặc định):

LoadModule rewrite_module modules/mod_rewrite.so 

Bật file .htaccess

Ta sẽ cấu hình Apache với các luật chuyển hướng sử dụng .htaccess . Đây là một tính năng phải được kích hoạt bằng cách nới lỏng các quyền trong Thư mục của DocumentRoot.

Mở file cấu hình Apache của bạn để chỉnh sửa. Trên CentOS, file cấu hình mặc định được đặt tại /etc/httpd/conf/httpd.conf , vì vậy ta sẽ sử dụng file đó trong ví dụ của bạn :

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

Giả sử rằng bạn đang sử dụng DocumentRoot mặc định, /var/www/html , hãy tìm đoạn cấu hình tương ứng với nó, <directory "/var/www/html> . Trong khối, thay đổi AllowOverride None thành AllowOverride All :

Thêm vào cấu hình Apache
 <Directory /var/www/html> ...     AllowOverride All ...  </Directory> 

Lưu và thoát.

Bây giờ khởi động lại Apache để thay đổi có hiệu lực:

  • sudo systemctl restart httpd

Bây giờ Apache được cấu hình để đọc các .htaccess nằm ở bất kỳ đâu trong folder /var/www/html . Hãy thêm luật Viết lại của ta ngay bây giờ.

Cấu hình module ghi lại

Như ta đã đề cập trước đó, ta sẽ cấu hình module Viết lại bằng .htaccess .

Thay đổi các folder thành DocumentRoot của bạn, trong trường hợp của ta là /var/www/html :

  • cd /var/www/html

Bây giờ hãy mở .htaccess để chỉnh sửa:

  • sudo vi .htaccess

Tất nhiên, nếu bạn chưa tạo file trước đó, nó sẽ trống. Tùy thuộc vào hướng bạn muốn chuyển hướng, hãy sử dụng một trong các tùy chọn sau.

Tùy chọn 1: Chuyển hướng www thành không phải www

Nếu bạn muốn chuyển hướng user từ www đến một domain thuần túy, không phải www, hãy chèn cấu hình sau:

.htaccess - www đến không phải www
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

Lưu và thoát. Các thay đổi sẽ có hiệu lực ngay lập tức. Lưu ý nếu bạn đang sử dụng HTTPS, bạn nên cập nhật “http”, trong dòng RewriteRule , thành “https”.

Sử dụng lệnh curl này đảm bảo rằng domain không phải www chuyển hướng đến domain www (thay thế phần được đánh dấu bằng domain thực của bạn):

curl -I http://www.example.com 

Bạn sẽ nhận được phản hồi 301 Moved Permanently , hiển thị vị trí chuyển hướng không phải www, như sau:

Output:
HTTP/1.1 301 Moved Permanently Date: Mon, 04 May 2015 16:04:56 GMT Server: Apache/2.4.6 (CentOS) Location: http://example.com/ Content-Type: text/html; charset=iso-8859-1

Tất nhiên, bạn nên truy cập domain của bạn trong trình duyệt web (www và không phải www) đảm bảo .

Tùy chọn 2: Chuyển hướng không phải www sang www

Nếu bạn muốn chuyển hướng user từ một domain thuần túy, không có www sang domain www, hãy chèn cấu hình sau:

.htaccess - không phải www thành www
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

Lưu và thoát. các thay đổi sẽ có hiệu lực ngay lập tức. Lưu ý nếu bạn đang sử dụng HTTPS, bạn nên cập nhật “http”, trong dòng RewriteRule , thành “https”.

Sử dụng lệnh curl này đảm bảo rằng domain không phải www chuyển hướng đến domain www (thay thế phần được đánh dấu bằng domain thực của bạn):

curl -I http://example.com 

Bạn sẽ nhận được phản hồi 301 Moved Permanently , hiển thị vị trí chuyển hướng www, như sau:

Output:
HTTP/1.1 301 Moved Permanently Date: Mon, 04 May 2015 16:05:26 GMT Server: Apache/2.4.6 (CentOS) Location: http://www.example.com/ Content-Type: text/html; charset=iso-8859-1

Tất nhiên, bạn nên truy cập domain của bạn trong trình duyệt web (www và không phải www) đảm bảo .

Kết luận

Đó là nó! Chuyển hướng Apache của bạn hiện đã được cấu hình đúng cách và user của bạn có thể truy cập web server của bạn thông qua domain không phải www và www của bạn.

Nếu bạn muốn hiểu thêm về mod_rewrite , tính năng Apache mà ta đã sử dụng để triển khai chuyển hướng, vui lòng đọc hướng dẫn này: Cách cài đặt Mod_Rewrite .


Tags:

Các tin liên quan

Cách chuyển hướng www thành không có www bằng Apache trên Ubuntu 14.04
2015-05-04
Cách thiết lập server Apache, MySQL và Python (LAMP) mà không cần khung trên Ubuntu 14.04
2015-04-29
Cách cấu hình bộ đệm nội dung Apache trên CentOS 7
2015-04-13
Cách cấu hình bộ đệm nội dung Apache trên Ubuntu 14.04
2015-04-10
Cách cài đặt database Apache Accumulo NoSQL thân thiện với dữ liệu lớn trên Ubuntu 14.04
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên CentOS 7
2015-03-19
Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 14.04
2015-03-18
Cách cấu hình Apache bằng Ansible trên Ubuntu 14.04
2015-02-18
Apache vs Nginx: Cân nhắc thực tế
2015-01-28
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 10.1
2015-01-14