Có rất nhiều cách để buộc Nginx sử dụng đường dẫn dạng non-www hoặc www. Mình xin giới thiệu một cách đơn giản như sau:

Redirect non-WWW sang WWW

Sửa file cấu hình của nginx (nginx.conf) hoặc nếu dùng HocVPS Script thì bạn hãy sửa file cấu hình cho từng domain trong folder /etc/nginx/conf.d/

Single domain

server {
        server_name example.com;
        return 301 $scheme://www.example.com$request_uri;
}

All domains

server {
        server_name "~^(?!www\.).*" ;
        return 301 $scheme://www.$host$request_uri;
}

Từ WWW sang non-WWW

Single domain

server {
        server_name www.example.com;
        return 301 $scheme://example.com$request_uri;
}

All domains

server {
         server_name "~^www\.(.*)$" ;
         return 301 $scheme://$1$request_uri ;
}

Ngoài ra, có một số plugin WordPress có thể xử lý việc redirect này ở mức PHP-level, nhưng để có performance tốt nhất, các bạn nên để cho Nginx tự xử.

71 Comments

  1. Nghĩa 2 comment

    Chào Luân

    Xin phép cho mình hỏi là mình đã up code lên vps, kết nối database … rồi

    Site đã chạy ( Fontsun.com ) nhưng cứ bị lỗi ERR_INCOMPLETE_CHUNKED_ENCODING

    đây là linh ảnh báo lỗi http://www.upsieutoc.com/image/bN67G

    Bạn xem có cách nào tìm giúp mình nguyên nhân và cách khắc phục với nhé, cảm ơn cậu nhiều !

    1. Việt Phương Moderator

      Gửi mình file cấu hình Nginx của domain mình xem cho. Chủ yếu cần thêm đoạn rewrite ^(.*) https://www.domain.com$1 permanent;

  2. Van 16 comment

    Bạn Luân cho mình hỏi là việc rederect giữa www và non www có làm server nặng nhiều không vậy.

  3. sinhle 61 comment

    mình chuyển sang www thì báo lỗi 404 Not Found. Và khi truy cập link domain nó ra một đống http://1doi1.com/www.1doi1.com/www.1doi1.com/www.1doi1.com………………………………
    Nhờ ace chỉ giúp.
    cảm ơn
    Đây là file của mình sau khi thêm

    server {
    listen 80;
    server_name 1doi1.com;
    return 301 $scheme://www.1doi1.com$request_uri;
    }
    server {
    listen 80;
    server_name http://www.1doi1.com;

    #other site settings go here (e.g. logs, site root)
    }
    ————— khúc dưới là code mặc định trong vps——–
    server {
    listen 80;

    server_name http://www.1doi1.com;
    rewrite ^(.*) http://1doi1.com$1 permanent;
    }
    server {
    listen 80 default_server;

    # access_log off;
    access_log /home/1doi1.com/logs/access.log;
    # error_log off;
    error_log /home/1doi1.com/logs/error.log;

    root /home/1doi1.com/public_html;
    index index.php index.html index.htm;
    server_name 1doi1.com;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    1. Việt Phương Moderator

      Bạn bị redirect loop do đã thiết lập redirect sai hướng (Ví dụ A sang B rồi ở đoạn khác lại B sang A). Bạn sử dụng HocVPS thì có sẵn block 80 rồi, đừng tạo ra thêm. Cụ thể 2 block server như sau, chú ý phần mình bôi đậm.

      server {
      	listen   80;
      	server_name hocvps.com;
      	rewrite ^(.*) http://www.hocvps.com$1 permanent;
          	}
      server {
      	listen   80;
          	# access_log off;
      	access_log /home/hocvps.com/logs/access.log;
          	# error_log off;
          	error_log /home/hocvps.com/logs/error.log;
      	root /home/hocvps.com/public_html;
      	index index.php index.html index.htm;
          	server_name www.hocvps.com;

      Nếu bạn dùng WP thì sửa cả siteurlhome trong MySQL database-wp-option

    1. Luân Trần Admin

      Bạn cần quy định rõ ở block server_name, cái nào non-www thì redirect sang www

      1. Luân Trần Admin

        server_name bạn không nên dùng ký tự *, mà ghi rõ là domain gì thì mới redirect được.

Comment của bạn

Your email address will not be published. Required fields are marked *