웹페이지 리디렉션 구성

웹페이지 리디렉션 구성 (선택 사항)

Amazon S3 버킷이 정적 웹사이트 호스팅용으로 구성되어 있다면 버킷이나 그 안의 객체에 대한 리디렉션을 구성할 수 있어요. 리디렉션을 구성하는 데는 다음 옵션이 있어요.

출처: 문서

본문

버킷 웹사이트 엔드포인트에 대한 요청을 다른 버킷이나 도메인으로 리디렉션 (Redirect requests for your bucket's website endpoint to another bucket or domain)

버킷의 웹사이트 엔드포인트에 대한 모든 요청을 다른 버킷이나 도메인으로 리디렉션할 수 있어요. 모든 요청을 리디렉션하면 웹사이트 엔드포인트에 대한 모든 요청이 지정된 버킷이나 도메인으로 리디렉션돼요.

예를 들어 루트 도메인이 example.com이고 http://example.com과 http://www.example.com 모두에 대한 요청을 제공하려면 example.com과 www.example.com이라는 두 버킷을 만들어야 해요. 그러고 나서 example.com 버킷에서 콘텐츠를 유지하고, 다른 www.example.com 버킷이 모든 요청을 example.com 버킷으로 리디렉션하도록 구성해요. 자세한 내용은 사용자 지정 도메인 이름으로 정적 웹사이트 구성을 참고하세요.

버킷 웹사이트 엔드포인트에 대한 요청을 리디렉션하는 방법은 다음과 같아요.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. Buckets 아래에서 요청을 리디렉션할 버킷의 이름(예: www.example.com)을 선택해요.
  3. Properties를 선택해요.
  4. Static website hosting 아래에서 Edit를 선택해요.
  5. Redirect requests for an object를 선택해요.
  6. Host name 상자에 버킷의 웹사이트 엔드포인트 또는 사용자 지정 도메인을 입력해요. 예를 들어 루트 도메인 주소로 리디렉션한다면 example.com을 입력해요.
  7. Protocol에서 리디렉션된 요청에 사용할 프로토콜을 선택해요(none, http, https). 프로토콜을 지정하지 않으면 기본 옵션은 none이에요.
  8. Save changes를 선택해요.

고급 조건부 리디렉션을 사용하도록 리디렉션 규칙 구성 (Configure redirection rules to use advanced conditional redirects)

고급 리디렉션 규칙을 사용하면 특정 객체 키 이름, 요청의 접두사 또는 응답 코드에 따라 요청을 조건부로 라우팅할 수 있어요. 예를 들어 버킷에서 객체를 삭제하거나 이름을 바꿨다고 가정해 볼게요. 요청을 다른 객체로 리디렉션하는 라우팅 규칙을 추가할 수 있어요. 폴더를 사용할 수 없게 만들고 싶다면 요청을 다른 웹페이지로 리디렉션하는 라우팅 규칙을 추가할 수 있어요. 오류가 처리될 때 오류를 반환하는 요청을 다른 도메인으로 라우팅해 오류 조건을 처리하는 라우팅 규칙을 추가할 수도 있어요.

버킷의 정적 웹사이트 호스팅을 활성화할 때 선택적으로 고급 리디렉션 규칙을 지정할 수 있어요. Amazon S3는 웹사이트 구성당 라우팅 규칙을 최대 50개로 제한해요. 50개 이상의 라우팅 규칙이 필요하다면 객체 리디렉션을 사용할 수 있어요. 자세한 내용은 S3 콘솔 사용을 참고하세요.

REST API로 라우팅 규칙을 구성하는 자세한 내용은 Amazon Simple Storage Service API Reference의 PutBucketWebsite를 참고하세요.

중요 새 Amazon S3 콘솔에서 리디렉션 규칙을 만들려면 JSON을 사용해야 해요. JSON 예시는 리디렉션 규칙 예시를 참고하세요.

정적 웹사이트의 리디렉션 규칙을 구성하는 방법은 다음과 같아요. 정적 웹사이트 호스팅이 이미 활성화된 버킷에 리디렉션 규칙을 추가하려면 다음 단계를 따라요.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택해요.
  3. 버킷 목록에서 정적 웹사이트로 구성한 버킷의 이름을 선택해요.
  4. Properties를 선택해요.
  5. Static website hosting 아래에서 Edit를 선택해요.
  6. Redirection rules 상자에 리디렉션 규칙을 JSON으로 입력해요. S3 콘솔에서는 규칙을 JSON으로 설명해요. JSON 예시는 리디렉션 규칙 예시를 참고하세요. Amazon S3는 웹사이트 구성당 라우팅 규칙을 최대 50개로 제한해요.
  7. Save changes를 선택해요.

라우팅 규칙 요소 (Routing rule elements)

다음은 웹사이트 구성에서 라우팅 규칙을 JSON과 XML로 정의하는 일반 구문이에요. 새 S3 콘솔에서 리디렉션 규칙을 구성하려면 JSON을 사용해야 해요. JSON 예시는 리디렉션 규칙 예시를 참고하세요.

JSON

[ {
  "Condition": {
    "HttpErrorCodeReturnedEquals": "string",
    "KeyPrefixEquals": "string"
  },
  "Redirect": {
    "HostName": "string",
    "HttpRedirectCode": "string",
    "Protocol": "http"|"https",
    "ReplaceKeyPrefixWith": "string",
    "ReplaceKeyWith": "string"
  }
} ]

참고: Redirect에는 각각 자식 요소가 하나 이상 있어야 해요. ReplaceKeyPrefixWith 또는 ReplaceKeyWith 중 하나만 가질 수 있고 둘 다는 안 돼요.

XML

<RoutingRules> =
  <RoutingRules>
    <RoutingRule>...</RoutingRule>
    [<RoutingRule>...</RoutingRule> ...]
  </RoutingRules>
<RoutingRule> =
  <RoutingRule>
    [ <Condition>...</Condition> ]
    <Redirect>...</Redirect>
  </RoutingRule>
<Condition> =
  <Condition>
    [ <KeyPrefixEquals>...</KeyPrefixEquals> ]
    [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ]
  </Condition>
  Note: <Condition> must have at least one child element.
<Redirect> =
  <Redirect>
    [ <HostName>...</HostName> ]
    [ <Protocol>...</Protocol> ]
    [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ]
    [ <ReplaceKeyWith>...</ReplaceKeyWith> ]
    [ <HttpRedirectCode>...</HttpRedirectCode> ]
  </Redirect>
  Note: <Redirect> must have at least one child element.
  You can have either ReplaceKeyPrefixWith or ReplaceKeyWith but not both.

다음 표는 라우팅 규칙의 요소를 설명해요.

이름 설명
RoutingRules RoutingRule 요소 컬렉션의 컨테이너예요.
RoutingRule 조건과 조건이 충족될 때 적용되는 리디렉션을 식별하는 규칙이에요. Condition: RoutingRules 컨테이너는 최소한 하나의 라우팅 규칙을 포함해야 해요.
Condition 지정된 리디렉션이 적용되려면 충족되어야 하는 조건을 설명하는 컨테이너예요. 라우팅 규칙에 조건이 없으면 그 규칙이 모든 요청에 적용돼요.
KeyPrefixEquals 요청이 리디렉션되는 객체 키 이름의 접두사예요. HttpErrorCodeReturnedEquals가 지정되지 않으면 KeyPrefixEquals가 필요해요. KeyPrefixEquals와 HttpErrorCodeReturnedEquals가 모두 지정되면 조건이 충족되려면 둘 다 참이어야 해요.
HttpErrorCodeReturnedEquals 리디렉션이 적용되기 위해 일치해야 하는 HTTP 오류 코드예요. 오류가 발생하고 오류 코드가 이 값과 일치하면 지정된 리디렉션이 적용돼요. KeyPrefixEquals가 지정되지 않으면 HttpErrorCodeReturnedEquals가 필요해요. KeyPrefixEquals와 HttpErrorCodeReturnedEquals가 모두 지정되면 조건이 충족되려면 둘 다 참이어야 해요.
Redirect 요청 리디렉션 지침을 제공하는 컨테이너 요소예요. 요청을 다른 호스트나 다른 페이지로 리디렉션하거나 다른 프로토콜을 지정할 수 있어요. RoutingRule에는 Redirect 요소가 있어야 해요. Redirect 요소에는 Protocol, HostName, ReplaceKeyPrefixWith, ReplaceKeyWith 또는 HttpRedirectCode 중 하나 이상의 형제 요소가 포함되어야 해요.
Protocol 응답에서 반환되는 Location 헤더에 사용할 프로토콜(http 또는 https)이에요. 형제 요소 중 하나가 제공되면 Protocol은 필요하지 않아요.
HostName 응답에서 반환되는 Location 헤더에 사용할 호스트 이름이에요. 형제 요소 중 하나가 제공되면 HostName은 필요하지 않아요.
ReplaceKeyPrefixWith 리디렉션 요청에서 KeyPrefixEquals의 값을 대체하는 객체 키 이름의 접두사예요. 형제 요소 중 하나가 제공되면 ReplaceKeyPrefixWith는 필요하지 않아요. ReplaceKeyWith가 제공되지 않을 때만 제공할 수 있어요.
ReplaceKeyWith 응답에서 반환되는 Location 헤더에 사용할 객체 키예요. 형제 요소 중 하나가 제공되면 ReplaceKeyWith는 필요하지 않아요. ReplaceKeyPrefixWith가 제공되지 않을 때만 제공할 수 있어요.
HttpRedirectCode 응답에서 반환되는 Location 헤더에 사용할 HTTP 리디렉션 코드예요. 형제 요소 중 하나가 제공되면 HttpRedirectCode는 필요하지 않아요.
리디렉션 규칙 예시 (Redirection rules examples)

다음 예시는 일반적인 리디렉션 작업을 설명해요.

중요 새 Amazon S3 콘솔에서 리디렉션 규칙을 만들려면 JSON을 사용해야 해요.

예시 1: 키 접두사 이름 변경 후 리디렉션 — 버킷에 다음 객체가 있다고 가정해 볼게요.

  • index.html
  • docs/article1.html
  • docs/article2.html

폴더 이름을 docs/에서 documents/로 바꾸기로 했어요. 이 변경을 만든 뒤에는 docs/ 접두사에 대한 요청을 documents/로 리디렉션해야 해요. 예를 들어 docs/article1.html 요청은 documents/article1.html로 리디렉션돼요.

이 경우 웹사이트 구성에 다음 라우팅 규칙을 추가해요.

JSON

[ {
  "Condition": { "KeyPrefixEquals": "docs/" },
  "Redirect": { "ReplaceKeyPrefixWith": "documents/" }
} ]

XML

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>docs/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

예시 2: 삭제된 폴더에 대한 요청을 페이지로 리디렉션 — images/ 폴더(즉, 키 접두사 images/가 있는 모든 객체)를 삭제했다고 가정해 볼게요. 키 접두사 images/가 있는 객체에 대한 요청을 folderdeleted.html이라는 페이지로 리디렉션하는 라우팅 규칙을 추가할 수 있어요.

JSON

[ {
  "Condition": { "KeyPrefixEquals": "images/" },
  "Redirect": { "ReplaceKeyWith": "folderdeleted.html" }
} ]

XML

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>images/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

예시 3: 특정 경로로 다른 도메인에 리디렉션 — 특정 경로에 대한 요청을 다른 도메인으로 리디렉션하고 싶다고 가정해 볼게요. 예를 들어 /redirect/me에 대한 요청을 https://example.com/new/path로 리디렉션하고 싶어요.

HostName과 ReplaceKeyWith를 함께 사용하면 Amazon S3는 호스트 이름과 대체 키를 사이에 슬래시를 두고 연결해 리디렉션 URL을 구성해요. 따라서 ReplaceKeyWith 값에 앞 슬래시를 포함하면 안 돼요. Amazon S3는 호스트 이름과 대체 키 사이에 슬래시를 자동으로 추가해요.

JSON

[ {
  "Condition": { "KeyPrefixEquals": "redirect/me" },
  "Redirect": { "HostName": "example.com", "ReplaceKeyWith": "new/path" }
} ]

XML

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>redirect/me</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <HostName>example.com</HostName>
      <ReplaceKeyWith>new/path</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

이 구성은 https://yourbucket.s3-website-region.amazonaws.com/redirect/me에 대한 요청을 https://example.com/new/path로 리디렉션해요. ReplaceKeyWith가 앞 슬래시 없이 new/path로 설정되어 있다는 점을 유의해요.

예시 4: HTTP 오류에 대한 리디렉션 — 요청된 객체를 찾을 수 없을 때 요청을 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 리디렉션하고 싶다고 가정해 볼게요. HTTP 상태 코드 **404 (Not Found)**가 반환되면 사이트 방문자를 그 요청을 처리하는 Amazon EC2 인스턴스로 리디렉션하도록 리디렉션 규칙을 추가해요.

다음 예시는 리디렉션에 객체 키 접두사 report-404/도 삽입해요. 예를 들어 ExamplePage.html 페이지를 요청했는데 HTTP 404 오류가 발생하면, 지정된 Amazon EC2 인스턴스의 report-404/ExamplePage.html 페이지로 요청이 리디렉션돼요. 라우팅 규칙이 없고 HTTP 오류 404가 발생하면 구성에 지정된 오류 문서가 반환돼요.

JSON

[ {
  "Condition": { "HttpErrorCodeReturnedEquals": "404" },
  "Redirect": { "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com", "ReplaceKeyPrefixWith": "report-404/" }
} ]

XML

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

객체에 대한 요청 리디렉션 (Redirect requests for an object)

객체의 메타데이터에 웹사이트 리디렉션 위치를 설정하면 객체에 대한 요청을 다른 객체나 URL로 리디렉션할 수 있어요. 객체 메타데이터에 x-amz-website-redirect-location 속성을 추가해 리디렉션을 설정해요. Amazon S3 콘솔에서는 객체의 메타데이터에서 Website Redirect Location을 설정해요. Amazon S3 API를 사용한다면 x-amz-website-redirect-location을 설정해요. 그러면 웹사이트가 그 객체를 301 리디렉션으로 해석해요.

요청을 다른 객체로 리디렉션하려면 리디렉션 위치를 대상 객체의 키로 설정해요. 요청을 외부 URL로 리디렉션하려면 리디렉션 위치를 원하는 URL로 설정해요. 객체 메타데이터에 대한 자세한 내용은 시스템 정의 객체 메타데이터를 참고하세요.

페이지 리디렉션을 설정할 때 소스 객체 콘텐츠를 유지하거나 삭제할 수 있어요. 예를 들어 버킷에 page1.html 객체가 있다면 이 페이지에 대한 요청을 다른 객체 page2.html로 리디렉션할 수 있어요. 두 가지 옵션이 있어요.

  • page1.html 객체의 콘텐츠를 유지하고 페이지 요청을 리디렉션해요.
  • page1.html의 콘텐츠를 삭제하고 기존 객체를 대체할 0바이트 객체 page1.html을 업로드해 페이지 요청을 리디렉션해요.

Amazon S3 콘솔에서 페이지 리디렉션을 설정하는 방법은 다음과 같아요.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. Buckets 목록에서 정적 웹사이트로 구성한 버킷의 이름(예: example.com)을 선택해요.
  3. Objects 아래에서 객체를 선택해요.
  4. Actions를 선택하고 Edit metadata를 선택해요.
  5. Metadata를 선택해요.
  6. Add Metadata를 선택해요.
  7. Type 아래에서 System Defined를 선택해요.
  8. Key에서 x-amz-website-redirect-location을 선택해요.
  9. Value에 리디렉션할 객체의 키 이름을 입력해요. 예: /page2.html. 같은 버킷의 다른 객체인 경우 값의 / 접두사가 필요해요. 값을 외부 URL(예: http://www.example.com)로 설정할 수도 있어요.
  10. Edit metadata를 선택해요.

다음 Amazon S3 API 작업은 요청에서 x-amz-website-redirect-location 헤더를 지원해요. Amazon S3는 헤더 값을 x-amz-website-redirect-location으로 객체 메타데이터에 저장해요.

웹사이트 호스팅용으로 구성된 버킷에는 웹사이트 엔드포인트와 REST 엔드포인트가 모두 있어요. 301 리디렉션으로 구성된 페이지에 대한 요청은 요청의 엔드포인트에 따라 다음 결과 중 하나를 가져요.

  • 리전별 웹사이트 엔드포인트 – Amazon S3가 x-amz-website-redirect-location 속성의 값에 따라 페이지 요청을 리디렉션해요.
  • REST 엔드포인트 – Amazon S3가 페이지 요청을 리디렉션하지 않아요. 요청된 객체를 반환해요.

엔드포인트에 대한 자세한 내용은 웹사이트 엔드포인트와 REST API 엔드포인트의 주요 차이점을 참고하세요.

페이지 리디렉션을 설정할 때 객체 콘텐츠를 유지하거나 삭제할 수 있어요. 예를 들어 버킷에 page1.html 객체가 있다고 가정해 볼게요.

  • page1.html의 콘텐츠를 유지하고 페이지 요청만 리디렉션하려면 기존 page1.html 객체를 소스로 사용하는 새 page1.html 객체를 만들도록 PUT Object - Copy 요청을 보낼 수 있어요. 요청에서 x-amz-website-redirect-location 헤더를 설정해요. 요청이 완료되면 콘텐츠가 변경되지 않은 원본 페이지를 갖게 되지만, Amazon S3는 그 페이지에 대한 모든 요청을 지정한 리디렉션 위치로 리디렉션해요.
  • page1.html 객체의 콘텐츠를 삭제하고 페이지에 대한 요청을 리디렉션하려면 같은 객체 키 page1.html의 0바이트 객체를 업로드하는 PUT Object 요청을 보낼 수 있어요. PUT 요청에서 page1.html의 x-amz-website-redirect-location을 새 객체로 설정해요. 요청이 완료되면 page1.html에는 콘텐츠가 없고, 요청은 x-amz-website-redirect-location이 지정하는 위치로 리디렉션돼요.

GET Object 작업으로 객체를 가져오면 다른 객체 메타데이터와 함께 Amazon S3가 응답에서 x-amz-website-redirect-location 헤더를 반환해요.

더 알아보기 (Learn more)