Chuyển hướng từ non-www sang www đúng cách trên Apache2

0
887
(Last Updated On: Th6 3, 2018)

Việc sử dụng https giúp tăng sự an toàn cho trang Web của bạn và người sử sụng mỗi khi họ đăng nhập hoặc thực hiện những giao dịch buôn bán trên trang.

Không tính những trang tin tức hoặc giải trí, khi mà người dùng không cần thiết phải đăng nhập thành viên để thực hiện quyền lợi nào đó thì không cần sử dụng tới https. Tuy nhiên xu thế của thế giới thì chúng ta cũng nên chú trọng mà đừng cho là ngoài lề, sớm muộn rồi thì hầu hết các trang web trên toàn thế giới cũng sẽ đều sử dụng ssl. Chưa kể sau này có thể thêm nhiều dạng giao thức bảo mật hơn nhưng đó là chuyện của tương lai, trước hết là cứ dùng giao thức https trước cái đã.

Chắc hẳn nhiều người cũng sẽ không yên tâm lắm nếu vào một trang nào đó mà thấy bảo là không an toàn. Mặc dù nếu họ không điền những thông tin nhạy cảm thì cũng không sao. Tuy nhiên, dẫu sao truy cập một trang Web bảo mật vẫn cảm thấy yên tâm hơn.

Có rất nhiều cách thiết lập chuyển hướng, kiểu như non-www thành www. Có nghĩa là từ domain gốc có thêm sub-domain www. Trải qua một thời gian dài và cũng đi theo lịch sử của World Wide Web thì dạng www.domain.com trở thành phổ biến và mặc nhiên nhiều người thường có thói quen gõ www phía trước tên miền (domain) mà họ biết. Một số trường hợp www giống như một điểm nhấn, giúp “trang điểm” nhẹ lên cho tên miền trước đó. Bản thân www chính là một sub-domain. Nhưng nó không đơn giản là một Sub-domain bình thường, nó như một cái cổng đại diện để đến với trang web của tên miền gốc (root domain).

Cũng chính vì thế mà nhiều người sẽ đắn đo với việc sử dụng www hay không dùng www. Thật ra thì nó cũng có ảnh hưởng chút ít đến SEO. Nhưng cũng theo nhiều nhà phân tích, việc sử dụng root domain hay www cũng là tùy thuộc của người quản trị. Các công cụ tìm kiếm vẫn dựa trên nội dung là chính. Và đánh giá SEO cũng như vậy. Không có nghĩa là dùng tên miền gốc sẽ không được tốt như sử dụng www hay ngược lại sử dụng www là nên hay không nên gì ở đây. Tuy nhiên một số trang Web hàng đầu thế giới họ đều sử dụng www phía trước như Google, Facebook, Youtube, Microsoft chẳng hạn.

Trong trường hợp với tên miền VnGeek, mình đã phân vân với hai lựa chọn:

  • https://vngeek.com
  • https://www.vngeek.com

Nhìn đi nhìn lại, vẫn thấy https://www.vngeek.com đẹp hơn. Tuy nhiên cuối cùng thì mình quyết định lựa chọn https://vngeek.com cho nó ngắn gọn.

Việc sử dụng https cho tên miền gốc (root domain) thì không có gì khó khăn khi thiết lập. Sau khi các bạn kích hoạt SSL. Đối với WordPress chỉ cần vào Settings => General và tại các ô địa chỉ WordPress địa chỉ Website các bạn chỉ cần điền dạng https://ten-mien.com là được.

Không WWW:

Nếu không sử dụng WordPress, bạn có thể cấu hình trong tập tin Virtual Host hoặc đơn giản là cấu hình file .htaccess trên Apache:

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]

Có WWW:

Như cấu hình tập tin .htaccess ở trên:

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]

Đó là cấu hình kiểu như các địa chỉ:

  • http://vngeek.com
  • http://www.vngeek.com
  • https://vngeek.com

Tất cả sẽ được chuyển hướng đến https://www.vngeek.com

Trong một số trường hợp sử dụng cùng với Cloud Flare các bạn sẽ bị lỗi Redirect loop. Lỗi này khiến trang chuyển hướng nhiều lần và cuối cùng không thể truy cập được. Bạn cần cấu hình thêm vào tập tin Virtual host của Apache:

<VirtualHost *:80>
    ServerName vngeek.com
    Redirect permanent / https://www.vngeek.com/
</VirtualHost>

Và khi đó tập tin Virtual host trông sẽ giống như:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName www.vngeek.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/vngeek

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

</VirtualHost>
<VirtualHost *:80>
    ServerName vngeek.com
    Redirect permanent / https://www.vngeek.com/
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Các bạn chú ý: Cài thêm Plugin Really Simple SSL để bật SSL đúng cách trên WordPress nhé.

Bình luận