Trong quá khứ, các trang web thường không được bảo mật và tất cả các URL đều bắt đầu bằng www. Ngày nay, hầu hết các trang web đều có chứng chỉ bảo mật SSL và phần lớn cũng loại bỏ phần tử www trong đường dẫn URL.
Trong bài viết này, mình sẽ hướng dẫn bạn cách chuyển tất cả link HTTP sang HTTPS và www sang non-www
Đối với máy chủ APACHE
Chuyển hướng từ http sang https
URL mặc định của các trang web không có chứng chỉ bảo mật SSL bắt đầu với http:// còn những trang web có chứng chỉ bắt đầu với https://.
Tuy nhiên, có rất nhiều người vẫn sử dụng http:// khi nhập URL. Để chuyển hướng tự động tất cả sang https:// bạn có thể sửa file .htaccess như sau:
# 301 REDIRECT HTTP TO HTTPS <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule>
Lưu ý: Sao lưu lại file .htaccess trước khi thay đổi BẤT KỲ ĐIỀU GÌ. Bất kỳ lỗi chính tả nào trong tệp sẽ làm ngừng hoạt động trang web của bạn.
Chuyển hướng từ https sang http
Trong trường hợp vì lý do nào đó bạn vẫn muốn sử dụng giao thức http://, bạn có thể sửa file .htaccess như sau:
# Redirect HTTPS to HTTP <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
Chuyển hướng từ www sang non-www
Khi các trang web mới xuất hiện, tất cả các URL đều bắt đầu bằng www (viết tắt của World Wide Web). Hiện nay, hầu hết các trang web đã bỏ bớt www để URL ngắn hơn.
Để chuyển hướng tất cả các liên kết đến trang web từ www sang phiên bản không có www tương ứng, bạn có thể sử dụng mã sau trong tệp .htaccess:
# 301 REDIRECT WWW TO NON-WWW <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] </IfModule>
Chuyển hướng từ non-www sang www
Tất nhiên, vẫn có các trang web chọn sử dụng www trong URL.
Để chuyển hướng tất cả các liên kết đến trang web từ phiên bản không có www sang phiên bản có chứa www tương ứng, bạn có thể sử dụng mã sau:
# 301 REDIRECT NON-WWW TO WWW <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC] RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L] </IfModule>
Chuyển hướng đồng thời http sang https và www sang non-www
Các đoạn mã trên chỉ thực hiện một chức năng, bạn cũng có thể kết hợp chúng vào cùng một đoạn mã như sau:
# 301 REDIRECT HTTP TO HTTPS AND WWW TO NON-WWW <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301] </IfModule>
Chuyển hướng đồng thời https sang http và non-www sang www
Tương tự với việc chuyển đồng thời https sang https và non-www sang www
# 301 REDIRECT HTTP TO HTTPS AND NON-WWW TO WWW <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301] </IfModule>
Những đoạn mã trên rất hữu ích để đảm bảo các URL trên trang web hoạt động theo ý bạn, còn nhiều đoạn mã khác cũng hữu ích mà bạn có thể sử dụng trong tệp .htaccess trong tài liệu tham khảo dưới đây. Lưu ý nhớ sao lưu tệp .htaccess để có thể khôi phục khi có sự cố nhé.
Đối với máy chủ NGINX
Nginx hiện chiếm 32% thị phần web server. NGINX không hỗ trợ .htaccess nên để chuyển hướng URL chúng ta phải sửa đổi trong cấu hình của NGINX.
Trong NGINX giao thức HTTP sử dụng cổng 80 và HTTPS sử dụng cổng 443, hãy truy cập vào thư mục cấu hình NGINX tại đường dẫn ../etc/nginx/conf.d/ và mở file cấu hình web của bạn (thông thường có tên là tenmien.conf). Sửa đổi đoạn code như sau:
server { listen 80; server_name example.com www.example.com; return 301 https://example.com$request_uri; }
Để chuyển hướng www sang non-www sửa code như sau:
server { listen 443 ssl; server_name www.example.com; return 301 $scheme://example.com$request_uri; }
Sau khi sửa đổi bạn khổi động lại Web server Nginx để thay đổi được thực hiện.
Trên đây là các cách chuyển hướng từ HTTP sang HTTPS, từ www sang non-www hoặc ngược lại. Bạn cần đảm bảo thực hiện một cách chính xác, nếu không sẽ ảnh hưởng đến thứ hạng tìm kiếm của trang web. Hy vọng bài viết này có thể giúp ích cho bạn.
Tham khảo:
Apache redirect www to non-www and HTTP to HTTPS (Simon Carletti)
23 Awesome .htaccess redirection from (www to Non-www) AND (Non-www to www) (2daygeek)
.htaccess Snippets (GitHub)