Hướng dẫn javascript redirect with headers - chuyển hướng javascript với các tiêu đề

How i can redirect after my loginPost method with header Authorization(my jquery code):

$(document).ready(function (){

    $("#form-login").submit(function (event){
        event.preventDefault();

        let $form = $(this),
            email = $form.find("input[name='email'").val(),
            password = $form.find("input[name='password'").val();

        loginPost(email, password);

    })

    function loginPost(email, password) {
        $.ajax({
            url:"/api/auth/login",
            type:"POST",
            async:false,
            data: {email, password},
            success: function (data) {
                let urlLogin;
                if(data["role"] === "ROLE_USER") {
                    urlLogin = "/api/user"
                } else {
                    urlLogin = "/api/admin"
                }
                $.ajax({
                    url:urlLogin,
                    type:"GET",
                    async: false,
                    headers: {
                        "Authorization": "Bearer "+data["token"]
                    }
                })
            }
        })
    }

Thymeleaf ViewController :

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}

After get request i have only response with hmtl page, but i need to redirect get route with rendering this page. If i doing window.location="/api/user" i have response 401.

Chuyển hướng URL là phân giải URL hiện tại thành một URL khác, qua đó thông báo cho khách truy cập và Google Tìm kiếm biết rằng trang đã có địa chỉ mới. Lệnh chuyển hướng đặc biệt hữu ích trong những trường hợp sau:

  • Bạn đã di chuyển trang web của mình sang một miền mới và bạn muốn quá trình chuyển đổi diễn ra suôn sẻ nhất có thể.
  • Mọi người truy cập trang web của bạn qua nhiều URL. Ví dụ: nếu mọi người có thể truy cập trang chủ của bạn qua nhiều cách (chẳng hạn như
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    3,
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    4, và
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    5), thì bạn nên chọn một trong những URL đó làm đích đến ưu tiên (chính tắc) rồi dùng lệnh chuyển hướng để chuyển lưu lượng từ các URL khác sang URL ưu tiên.
  • Bạn định hợp nhất hai trang web và muốn đảm bảo rằng đường liên kết tới các URL lỗi thời được chuyển hướng tới đúng trang.
  • Bạn đã xoá một trang và muốn đưa người dùng đến một trang mới.

Tổng quan về các loại lệnh chuyển hướng

Thường thì người dùng không phân biệt được các loại lệnh chuyển hướng, nhưng đối với Google Tìm kiếm, lệnh chuyển hướng giống như một tín hiệu và độ mạnh yếu của tín hiệu đó cho biết có nên chọn trang đích chuyển hướng làm phiên bản chính tắc hay không. Cách chọn lệnh chuyển hướng tuỳ thuộc vào việc bạn dự kiến lệnh chuyển hướng sẽ có hiệu lực trong bao lâu và bạn muốn Google Tìm kiếm hiện trang nào trong kết quả tìm kiếm:

  • Chuyển hướng vĩnh viễn: Trang đích mới sau khi chuyển hướng sẽ xuất hiện trong kết quả tìm kiếm. : Trang đích mới sau khi chuyển hướng sẽ xuất hiện trong kết quả tìm kiếm.
  • Chuyển hướng tạm thời: Trang nguồn trước khi chuyển hướng sẽ xuất hiện trong kết quả tìm kiếm. : Trang nguồn trước khi chuyển hướng sẽ xuất hiện trong kết quả tìm kiếm.

Bảng sau đây giải thích các phương pháp thiết lập lệnh chuyển hướng vĩnh viễn và tạm thời, được sắp xếp theo xác suất Google có thể hiểu đúng lệnh chuyển hướng đó (ví dụ: lệnh chuyển hướng phía máy chủ sẽ có xác suất được Google hiểu đúng cao nhất). Chọn loại lệnh chuyển hướng phù hợp với tình huống và trang web của bạn:

Loại lệnh chuyển hướng
Vĩnh viễn

Googlebot sẽ đi theo lệnh chuyển hướng và quy trình lập chỉ mục sẽ coi lệnh chuyển hướng là một tín hiệu mạnh cho thấy trang đích chuyển hướng này nên được chọn làm trang chính tắc. mạnh cho thấy trang đích chuyển hướng này nên được chọn làm trang chính tắc.

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
6

Thiết lập lệnh chuyển hướng phía máy chủ.

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
7
@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8 (0 giây)

Thiết lập lệnh chuyển hướng

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8.

HTTP refresh (0 giây)
JavaScript
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/newurl');
exit();
0

Thiết lập lệnh chuyển hướng JavaScript.

Lệnh chuyển hướng CryptoCrypto

Tìm hiểu thêm về lệnh chuyển hướng crypto. crypto.

Tạm thời

Googlebot sẽ đi theo lệnh chuyển hướng và quy trình lập chỉ mục sẽ coi lệnh chuyển hướng là một tín hiệu yếu cho thấy không nên chọn trang đích chuyển hướng này làm trang chính tắc. yếu cho thấy không nên chọn trang đích chuyển hướng này làm trang chính tắc.

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/newurl');
exit();
1

Thiết lập lệnh chuyển hướng phía máy chủ.

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
7
@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8 (0 giây)
Thiết lập lệnh chuyển hướng
@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8.

Thiết lập lệnh chuyển hướng

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8.

HTTP refresh (0 giây)

JavaScript header('HTTP/1.1 301 Moved Permanently'); header('Location: http://www.example.com/newurl'); exit();0

Thiết lập lệnh chuyển hướng JavaScript.

Lệnh chuyển hướng Crypto

Tìm hiểu thêm về lệnh chuyển hướng crypto.

Lệnh chuyển hướng tạm thời phía máy chủ

Nếu bạn chỉ muốn tạm thời chuyển người dùng đến một trang khác, hãy sử dụng lệnh chuyển hướng tạm thời. Điều này cũng sẽ đảm bảo rằng Google giữ lại URL cũ trong kết quả lâu hơn. Ví dụ: Nếu trang web của bạn đang tạm dừng cung cấp dịch vụ, thì bạn có thể thiết lập một lệnh chuyển hướng tạm thời để đưa người dùng đến một trang có nội dung giải thích sự việc mà không ảnh hưởng đến URL gốc trong kết quả tìm kiếm.

Triển khai lệnh chuyển hướng phía máy chủ

Việc triển khai lệnh chuyển hướng phía máy chủ phụ thuộc vào môi trường lưu trữ và máy chủ hoặc ngôn ngữ kịch bản trong phần phụ trợ của trang web.

Để thiết lập lệnh chuyển hướng vĩnh viễn bằng PHP, hãy dùng hàm

header('HTTP/1.1 302 Found');
header('Location: http://www.example.com/newurl');
exit();
0. Bạn phải đặt tiêu đề trước khi gửi nội dung bất kỳ lên màn hình:

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/newurl');
exit();

Tương tự như vậy, sau đây là một ví dụ về cách thiết lập lệnh chuyển hướng tạm thời bằng PHP:

header('HTTP/1.1 302 Found');
header('Location: http://www.example.com/newurl');
exit();

Nếu có quyền truy cập vào tệp cấu hình của máy chủ web, bạn có thể tự viết các quy tắc chuyển hướng. Hãy làm theo hướng dẫn của máy chủ web bạn đang dùng:

  • Apache: Hãy tham khảo Hướng dẫn của Apache về

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.example.com/newurl');
    exit();
    7, Hướng dẫn của Apache về cách viết lại URL và tài liệu của Apache về
    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    2. Ví dụ: Bạn có thể dùng
    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    2 để thiết lập hình thức chuyển hướng đơn giản nhất:
    Hãy tham khảo Hướng dẫn của Apache về
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.example.com/newurl');
    exit();
    7, Hướng dẫn của Apache về cách viết lại URL và tài liệu của Apache về
    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    2. Ví dụ: Bạn có thể dùng
    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    2 để thiết lập hình thức chuyển hướng đơn giản nhất:

    # Permanent redirect:
    Redirect permanent "/old" "http://example.com/new"
    
    # Temporary redirect:
    Redirect temp "/two-old" "http://example.com/two-new"

    Đối với các lệnh chuyển hướng phức tạp hơn, hãy dùng

    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    4. Ví dụ:

    RewriteEngine on
    # redirect the service page to a new page with a permanent redirect
    RewriteRule   "^/service$"  "/about/service"  [R=301]
    
    # redirect the service page to a new page with a temporary redirect
    RewriteRule   "^/service$"  "/about/service"  [R]
  • NGINX: Hãy đọc về cách Tạo quy tắc viết lại NGINX trên blog của NGINX. Giống như với Apache, bạn có nhiều cách để tạo lệnh chuyển hướng. Ví dụ: Hãy đọc về cách Tạo quy tắc viết lại NGINX trên blog của NGINX. Giống như với Apache, bạn có nhiều cách để tạo lệnh chuyển hướng. Ví dụ:

    location = /service {
      # for a permanent redirect
      return 301 $scheme://example.com/about/service
    
      # for a temporary redirect
      return 302 $scheme://example.com/about/service
    }

    Đối với các lệnh chuyển hướng phức tạp hơn, hãy dùng lệnh

    header('HTTP/1.1 302 Found');
    header('Location: http://www.example.com/newurl');
    exit();
    5:

    location = /service {
      # for a permanent redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ permanent;
    
      # for a temporary redirect
      rewrite service?name=$1 ^service/offline/([a-z]+)/?$ redirect;
    }
  • Đối với tất cả các máy chủ web khác, hãy hỏi người quản lý máy chủ/máy chủ lưu trữ hoặc tìm kiếm hướng dẫn bằng công cụ tìm kiếm mà bạn thích dùng (ví dụ: tìm kiếm theo từ khoá "LiteSpeed redirects" – "lệnh chuyển hướng LiteSpeed").

Nếu không thể triển khai lệnh chuyển hướng phía máy chủ trên nền tảng của bạn, lệnh

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8 có thể là một phương án khả thi. Google phân biệt giữa hai loại lệnh chuyển hướng
@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8:

  • Lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 tức thì: Kích hoạt ngay khi trang được tải trong trình duyệt. Google Tìm kiếm xem lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 tức thì là lệnh chuyển hướng vĩnh viễn.
    : Kích hoạt ngay khi trang được tải trong trình duyệt. Google Tìm kiếm xem lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 tức thì là lệnh chuyển hướng vĩnh viễn.
  • Lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 có độ trễ: Chỉ kích hoạt sau số giây bất kỳ do chủ sở hữu trang web đặt. Google Tìm kiếm xem lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 có độ trễ là lệnh chuyển hướng tạm thời.
    : Chỉ kích hoạt sau số giây bất kỳ do chủ sở hữu trang web đặt. Google Tìm kiếm xem lệnh chuyển hướng
    @Controller
    @RequestMapping("/api")
    public class ViewController {
    
       @PreAuthorize("hasRole('ROLE_USER')")
       @RequestMapping("/user")
       public String userPage() {
           return "user_page";
       }
       
       @PreAuthorize("hasRole('ROLE_ADMIN')")
       @GetMapping("/admin")
       public String adminPage() {
           return "admin_page";
       }
    
    }
    
    8 có độ trễ là lệnh chuyển hướng tạm thời.

Hãy đặt lệnh chuyển hướng

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8 vào phần tử
# Permanent redirect:
Redirect permanent "/old" "http://example.com/new"

# Temporary redirect:
Redirect temp "/two-old" "http://example.com/two-new"
3 trong HTML hoặc trong tiêu đề HTTP có mã phía máy chủ. Chẳng hạn, đây là một lệnh chuyển hướng
@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
8 tức thì trong phần tử
# Permanent redirect:
Redirect permanent "/old" "http://example.com/new"

# Temporary redirect:
Redirect temp "/two-old" "http://example.com/two-new"
3 trong HTML:



  
  
  Example title
  

Còn đây là một ví dụ về tiêu đề HTTP tương đương mà bạn có thể đưa vào bằng các tập lệnh phía máy chủ:

HTTP/1.1 200 OK
Refresh: 0; url=http://www.example.com/newlocation
...

Để tạo lệnh chuyển hướng có độ trễ (mà Google xem là một lệnh chuyển hướng tạm thời), hãy đặt giá trị của thuộc tính

# Permanent redirect:
Redirect permanent "/old" "http://example.com/new"

# Temporary redirect:
Redirect temp "/two-old" "http://example.com/two-new"
6 thành số giây trễ của lệnh chuyển hướng đó:

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
0

Lệnh chuyển hướng header('HTTP/1.1 301 Moved Permanently'); header('Location: http://www.example.com/newurl'); exit();0 bằng JavaScript

Google Tìm kiếm diễn giải và thực thi JavaScript bằng Dịch vụ kết xuất web sau khi hoàn tất quá trình thu thập dữ liệu URL.

Để thiết lập lệnh chuyển hướng JavaScript, hãy đặt giá trị của thuộc tính

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/newurl');
exit();
0 thành URL đích của lệnh chuyển hướng và đặt thuộc tính này trong khối lệnh ở phần đầu của tệp HTML. Ví dụ:

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
1

Lệnh chuyển hướng CryptoCrypto

Nếu không thể triển khai phương thức chuyển hướng truyền thống nào, bạn vẫn nên cố gắng cho người dùng biết rằng trang hoặc nội dung của trang đã di chuyển. Cách đơn giản nhất để làm điều này là thêm đường liên kết trỏ đến trang mới kèm theo lời giải thích ngắn gọn. Ví dụ:

@Controller
@RequestMapping("/api")
public class ViewController {

   @PreAuthorize("hasRole('ROLE_USER')")
   @RequestMapping("/user")
   public String userPage() {
       return "user_page";
   }
   
   @PreAuthorize("hasRole('ROLE_ADMIN')")
   @GetMapping("/admin")
   public String adminPage() {
       return "admin_page";
   }

}
2

Cách này giúp người dùng tìm thấy trang web mới và Google có thể hiểu đây là lệnh chuyển hướng crypto. crypto.

Phiên bản thay thế của URL

Khi bạn chuyển hướng URL, Google sẽ theo dõi cả nguồn (URL cũ) và đích (URL mới) của lệnh chuyển hướng đó. Một trong hai URL này sẽ là phiên bản chính tắc, còn cụ thể là URL nào thì còn tuỳ thuộc vào những tín hiệu như đó là lệnh chuyển hướng tạm thời hay vĩnh viễn. URL còn lại sẽ trở thành tên thay thế của URL chính tắc. Tên thay thế là các phiên bản khác của URL chính tắc mà có thể người dùng dễ nhận ra và tin tưởng hơn. Tên thay thế có thể xuất hiện trong kết quả tìm kiếm khi cụm từ tìm kiếm của người dùng cho thấy URL cũ có thể sẽ đáng tin cậy hơn.

Ví dụ: Nếu bạn chuyển sang tên miền mới, rất có khả năng Google đôi khi vẫn cho thấy URL cũ trong kết quả dù đã lập chỉ mục URL mới. Điều này là bình thường. Khi người dùng đã quen với tên miền mới, các tên thay thế sẽ tự biến mất mà bạn không cần làm gì thêm.