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 và 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:
 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 :
 <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:
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:
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 .
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.042015-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 cung cấp các ứng dụng Django với Apache và mod_wsgi trên CentOS 7
2015-03-19
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 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
 

