Cách chuyển hướng www thành không có www bằng Apache trên Ubuntu 14.04
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 URL có www thành không phải www, ví dụ: www.example.com
đến example.com
, với Apache trên Ubuntu 14.04. Ta cũng sẽ chỉ cho bạn cách chuyển hướng theo hướng khác, từ URL không phải www sang www . Phiên bản CentOS 7 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 Ubuntu 14.04 .
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 Ubuntu 14.04 .
Giả sử rằng bạn đã cài đặt Apache. 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
Để 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.
Đầu tiên, kích hoạt module mod_rewrite bằng lệnh này:
- sudo a2enmod rewrite
Với module Viết lại được bật, ta có thể cấu hình Apache với các luật chuyển hướng bằng cách sử dụng .htaccess
.
Bật file .htaccess
Mở file cấu hình Apache của bạn để chỉnh sửa. Trên Ubuntu, file cấu hình mặc định được đặt tại /etc/apache2/sites-enabled/000-default.conf
, vì vậy ta sẽ sử dụng file đó trong ví dụ của bạn :
- sudo vi /etc/apache2/sites-enabled/000-default.conf
Tìm DocumentRoot của trang web và ghi lại nó. Theo mặc định, nó là /var/www/html
, vì vậy ta sẽ sử dụng nó trong cấu hình ví dụ của ta .
Thêm chỉ thị Thư mục sau vào cấu hình và đảm bảo thay thế DocumentRoot cho phần được đánh dấu:
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
Lưu và thoát.
Bây giờ khởi động lại Apache để thay đổi có hiệu lực:
- sudo service apache2 restart
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: Fri, 01 May 2015 21:18:33 GMT Server: Apache/2.4.7 (Ubuntu) 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: Fri, 01 May 2015 21:18:33 GMT Server: Apache/2.4.7 (Ubuntu) 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 CentOS 72015-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