openplanning

Các quy tắc chuyển hướng cho S3 Static Website

  1. S3 Rest API Endpoint URL vs S3 Web Endpoint URL
  2. Cấu hình chuyển hướng ở đâu?
  3. Các thuộc tính JSON
  4. Chuyển hướng sau khi thay đổi tiếp đầu ngữ của Key
  5. Chuyển hướng tới một trang để thông báo một thư mục đã bị xoá
  6. Chuyển hướng cho một lỗi HTTP
  7. Có thể bạn quan tâm
Bằng cách sử dụng các quy tắc chuyển hướng nâng cao, bạn có thể chuyển hướng các yêu cầu dựa trên tiền tố của khoá (Key Prefix) hoặc mã phản hồi (Response code). Các quy tắc chuyển hướng nâng cao trong bài học này chỉ được áp dụng cho S3 Static Website.

1. S3 Rest API Endpoint URL vs S3 Web Endpoint URL

Chú ý: Có hai định dạng tên miền được cung cấp bởi Amazon S3 để bạn truy cập vào các đối tượng trong Bucket. Các quy tắc chuyển hướng trong bài học này chỉ hỗ trợ cho "S3 Website Endpoint URL".
Type
URL Format
Suport Redirection?
S3 Endpoint URL
  • http://{bucket-name}.s3.{region-id}.amazonaws.com/{object-key}
No
Website Endpoint URL
  • http://{bucket-name}.s3-website.{region-id}.amazonaws.com/{object-key}
Yes
Nếu bạn không muốn sử dụng các tên miền không thân thiện trên, bạn có thể cấu hình một tên miền tuỳ biến của bạn hoặc sử dụng CloudFront:

2. Cấu hình chuyển hướng ở đâu?

Đầu tiên, đăng nhập vào AWS S3 Console, và lựa chọn một S3 Bucket.
  • Properties > Static web hosting > Edit
Bạn sẽ nhìn thấy một trình soạn thảo văn bản, nơi bạn sẽ định nghĩa các quy tắc chuyển hướng với định dạng JSON.

3. Các thuộc tính JSON

Dưới đây là cú pháp để định nghĩa một quy tắc định tuyến trong S3 Static Website:
[
   {
      "Condition":{
         "HttpErrorCodeReturnedEquals":"string",
         "KeyPrefixEquals":"string"
      },
      "Redirect":{
         "HostName":"string",
         "HttpRedirectCode":"string",
         "Protocol":"http""|""https",
         "ReplaceKeyPrefixWith":"string",
         "ReplaceKeyWith":"string"
      }
   }
]
JSON Property
Description
Condition
Vùng chứa để mô tả một điều kiện phải được đáp ứng để áp dụng chuyển hướng đã chỉ định. Nếu quy tắc định tuyến không bao gồm "Condition" thì quy tắc đó sẽ được áp dụng cho tất cả các yêu cầu.
HttpErrorCodeReturnedEquals
Mã lỗi HTTP. 403, 404,..
  • HttpErrorCodeReturnedEquals là bắt buộc nếu KeyPrefixEquals không được chỉ định.
  • Nếu cả KeyPrefixEqualsHttpErrorCodeReturnedEquals đều được chỉ định thì cả hai đều phải đúng thì điều kiện mới được đáp ứng.
KeyPrefixEquals
Tiền tố của khóa đối tượng cho bởi yêu cầu.
  • KeyPrefixEquals là bắt buộc nếu HttpErrorCodeReturnedEquals không được chỉ định.
  • Nếu cả KeyPrefixEqualsHttpErrorCodeReturnedEquals đều được chỉ định thì cả hai đều phải đúng thì điều kiện mới được đáp ứng.
Redirect
Vùng chứa cung cấp các chỉ dẫn cho việc chuyển hướng yêu cầu. Một phần tử Redirect phải chứa ít nhất một phần tử con.
HostName
Chỉ định một tên miền khác mà yêu cầu sẽ được chuyển tới.
  • Nếu một trong các anh chị em của nó được cung cấp thì HostName là không bắt buộc.
HttpRedirectCode
Mã chuyển hướng (redirect code) của phản hồi (response) được trả về cho người dùng. Các giá trị là 200, 301, 302, 404,...
  • Nếu một trong các anh chị em của nó được cung cấp thì HttpRedirectCode là không bắt buộc.
Protocol
Chỉ định một giao thức khác mà yêu cầu sẽ được chuyển hướng tới. Giá trị của nó là "http" hoặc "https".
  • Nếu một trong các anh chị em của nó được cung cấp thì Protocol là không bắt buộc.
ReplaceKeyPrefixWith
Chỉ định tiền tố mới để thay thế cho KeyPrefixEquals.
  • Nếu một trong những anh chị em của nó được cung cấp, thì ReplaceKeyPrefixWith không bắt buộc. Nó chỉ có thể được cung cấp nếu ReplaceKeyWith không được cung cấp.
ReplaceKeyWith
Chỉ định khoá mới để thay thế cho khoá ban đầu của đối tượng.
  • Nếu một trong những anh chị em của nó được cung cấp, thì ReplaceKeyWith là không bắt buộc. Nó chỉ có thể được cung cấp nếu ReplaceKeyPrefixWith không được cung cấp.

4. Chuyển hướng sau khi thay đổi tiếp đầu ngữ của Key

Giả sử rằng Bucket của bạn có các đối tượng sau:
  • index.html
  • docs/article1.html
  • docs/article2.html
Bạn quyết định đổi tên thư mục "docs/" thành "documents/". Sau khi thực hiện hành động này bạn phải chuyển hướng các đường dẫn cũ thành mới để đảm bảo rằng người dùng đã từng sử dụng đường dẫn cũ vẫn tiếp cận được tài liệu mà họ quan tâm.
  • /docs/article1.html --> /documents/article1.html
Cấu hình chuyển hướng:
[
    {
        "Condition": {
            "KeyPrefixEquals": "docs/"
        },
        "Redirect": {
            "ReplaceKeyPrefixWith": "documents/"
        }
    }
]
Chú ý rằng: Các quy tắc chuyển hướng chỉ hoạt động khi cấu trúc URL"Web Endpoint".
  • http://{bucket-name}.s3-website.{Region}.amazonaws.com/docs/article1.html

5. Chuyển hướng tới một trang để thông báo một thư mục đã bị xoá

Giả sử một thư mục đã bị xoá khỏi S3 Bucket, các tài liệu trong thư mục này không còn được hỗ trợ nữa. Nếu người dùng cố gắng truy cập vào các tài liệu trong thư mục này, bạn sẽ chuyển hướng họ đến một trang thông báo.
html2-deleted.html
<!DOCTYPE html>
<html>
<head>
   <title>Html 2.0 Lessons Deleted</title>
</head>
<body>
   HTML 2.0 lessons are no longer supported. <br/>
   You can learn HTML 5 by following the link below: <br/>
   <a href='/html5/get-started.html'>Learn HTML5</a>
</body>
</html>
Cấu hình chuyển hướng:
[
   {
      "Condition":{
         "KeyPrefixEquals":"html2/"
      },
      "Redirect":{
         "ReplaceKeyWith":"html2-deleted.html"
      }
   }
]
Kiểm tra kết quả:

6. Chuyển hướng cho một lỗi HTTP

Giả sử rằng người dùng xem thông tin về một "tác giả" nhưng không tìm thấy, bạn muốn chuyển hướng yêu cầu này tới máy chủ thực sự để xử lý. Chẳng hạn, chuyển yêu cầu tới Amazon EC2 (Amazon Elastic Computing Cloud).
[
  {
    "Condition": {
      "KeyPrefixEquals": "author/",
      "HttpErrorCodeReturnedEquals": "404"
    },
    "Redirect": {
      "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
      "ReplaceKeyPrefixWith": "report-author-404/"
    }
  }
]
Kiểm tra kết quả:
  • ---> http://ec2-11-22-333-44.compute-1.amazonaws.com/report-author-404/123
  • Giới thiệu về Amazon EC2

7. Có thể bạn quan tâm

Các quy tắc chuyển hướng được cung cấp bởi Amazon S3 ở trên có vẻ quá đơn giản và có thể không thoả mãn được nhu cầu thực tế của bạn. Hãy xem xét một tình huống:
Giả sử rằng bạn có một trang như thế này:
  • http://yourdomain.com/12345/java-tutorial
Đôi khi người dùng sử dụng các URL không chính xác, có thể do lỗi chính tả, chẳng hạn:
  • http://yourdomain.com/12345/java-tuto
  • http://yourdomain.com/12345/
  • http://yourdomain.com/12345
CloudFront error pages
Với tình huống trên bạn muốn chuyển hướng yêu cầu của người dùng tới URL chính xác. Bạn nên dụng CloudFront để giải quyết vấn đề này và có nhiều tình huống phức tạp khác.
AWS Lambda
Sử dụng AWS Lambda để chuyển hướng.
  • CloudFront direction Lambda
x-amz-website-redirect-location
Chuyển hướng một đối tượng dựa trên metadata x-amz-website-redirect-location.

Các hướng dẫn Amazon Web Services

Show More