

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 指定預設根物件
<a name="DefaultRootObject"></a>

當使用者 (檢視器) 請求分佈的根 URL，而不是請求該分佈中的物件時，您可以設定由 CloudFront 傳回特定的物件 (預設根物件)。您可以使用預設根物件以避免暴露分佈的內容。

**Contents**
+ [如何指定預設根物件](#DefaultRootObjectHowToDefine)
+ [預設根物件的運作方式](#DefaultRootObjectHow)
+ [未定義根物件的情況下 CloudFront 的運作方式](#DefaultRootObjectNotSet)

## 如何指定預設根物件
<a name="DefaultRootObjectHowToDefine"></a>

為了避免暴露分佈的內容或傳回錯誤，請為您的分佈指定預設根物件。您可以指定確切的檔案名稱或檔案的路徑。例如，如果您的根物件是 `index.html` 檔案，您可以指定該檔案名稱。如果您的 `index.html` 檔案位於另一個資料夾中，請改為指定路徑，例如 `exampleFolderName/index.html`。如果您設定預設根物件的路徑，檢視器對分佈根 URL 的請求會從該路徑傳回指定的檔案。您可以使用檔案路徑在原始伺服器更靈活地組織內容，因為您的預設根物件可以位於資料夾，而不是根層級。<a name="DefaultRootObjectProcedure"></a>

**指定分佈的預設根物件**

1. 上傳預設根物件到您分佈指向的原始伺服器。

   檔案可以是由 CloudFront 支援的任何類型。針對檔案名稱上限制條件的清單，請參閱《Amazon CloudFront API 參考》**之 [DistributionConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DistributionConfig.html) 中的 `DefaultRootObject` 元素說明。
**注意**  
如果預設根物件的檔案名稱太長或包含無效字元，則 CloudFront 會傳回錯誤 `HTTP 400 Bad Request - InvalidDefaultRootObject`。此外，CloudFront 會快取程式碼 10 秒 (預設情況下)，並將結果寫入存取日誌。

1. 確認物件授予 CloudFront 的許可至少包括讀取權限。

   如需 Amazon S3 許可的詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的 [Amazon S3 中的身分和存取管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

1. 請更新您的分佈，以使用 CloudFront 主控台或 CloudFront API 參照預設根物件。

   如要使用 CloudFront 主控台指定預設根物件：

   1. 登入 AWS 管理主控台 ，並在 開啟 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

   1. 在上方窗格中的分佈清單裡，請選取分佈來更新。

   1. 在 **Settings** (設定) 窗格中的 **General** (一般) 標籤，選擇 **Edit** (編輯)。

   1. 在**編輯設定**對話方塊的**預設根物件**欄位中，輸入預設根物件的檔案名稱或路徑。
**提示**  
您的字串不能以正斜線 (`/`) 開頭。僅指定物件名稱或物件的路徑。例如，使用 `index.html` 或 `exampleFolderName/index.html`。指定 `/exampleFolderName/index.html` 或 `/index.html` 可能會導致 [403 存取遭拒錯誤](http-403-permission-denied.md)。

   1. 選擇**儲存變更**。

   若要更新使用 CloudFront API 的組態，請在分佈中指定 `DefaultRootObject` 元素的值。如需使用 CloudFront API 指定預設根物件的詳細資訊，請參閱*《Amazon CloudFront API 參考》*中的 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。

1. 確認您已藉由請求根 URL 來啟用預設根物件。如果您的瀏覽器不會顯示預設根物件，請執行以下步驟：

   1. 確認是否藉由檢視 CloudFront 主控台中的分佈狀態來完全部署您的分佈。

   1. 重複步驟 2 和 3 來驗證您是否已授予正確的許可和驗證您是否正確地更新分佈的組態來指定預設根物件。

## 預設根物件的運作方式
<a name="DefaultRootObjectHow"></a>

假設以下請求指向物件 `image.jpg`：

`https://d111111abcdef8.cloudfront.net/image.jpg`

相對地，以下請求指向同一分佈的根 URL，而非如前述範例指向特定物件：

`https://d111111abcdef8.cloudfront.net/`

當您定義預設根物件時，呼叫分佈根的最終使用者請求會傳回預設的根物件。例如，如果您指定檔案 `index.html` 為預設根物件，則請求：

`https://d111111abcdef8.cloudfront.net/`

傳回：

`https://d111111abcdef8.cloudfront.net/index.html`

**注意**  
CloudFront 不會判斷具有多條結尾斜線 (`https://d111111abcdef8.cloudfront.net///`) 的 URL 是否等於 `https://d111111abcdef8.cloudfront.net/`。您的原始伺服器會進行這項比較。

如果您定義預設根物件時，適用於分佈子目錄的最終使用者請求不會傳回預設的根物件。例如，假設 `index.html` 是您的預設根物件，則 CloudFront 會收到在 CloudFront 分佈下適用於 `install` 目錄的最終使用者請求：

`https://d111111abcdef8.cloudfront.net/install/`

CloudFront 不會傳回預設根物件，即使 `index.html` 的副本出現在 `install` 目錄中。不過，如果您已指定預設根物件的*路徑*，(`install/index.html`) CloudFront 會傳回 `install` 目錄最終使用者請求的預設根物件

如果您配置分佈來允許 CloudFront 支援的所有 HTTP 方法，則預設根物件便套用到所有方法。例如，如果您的預設根物件是 index.php，而且您編寫應用程式將 `POST` 請求提交至網域 (https://example.com) 的根，則 CloudFront 會將請求傳送至 https://example.com/index.php。

CloudFront 預設根物件的行為與 Amazon S3 索引文件的行為不同。當您配置 Amazon S3 儲存貯體做為網站，並指定索引文件時，Amazon S3 傳回索引文件，即使使用者在儲存貯體中請求子目錄。(索引文件的副本必須出現在每個子目錄)。有關將 Amazon S3 儲存貯體設定為網站以及索引文件的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的 [AmazonS3 上的託管網站](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)一章。

**重要**  
請記住，預設根物件僅適用於您的 CloudFront 分佈。您仍然需要為原始伺服器管理安全性。例如，如果您使用 Amazon S3 原始伺服器，您仍然需要設定適當的 Amazon S3 儲存貯體 ACL，以確保在儲存貯體上您想要的存取層級。

## 未定義根物件的情況下 CloudFront 的運作方式
<a name="DefaultRootObjectNotSet"></a>

如果您不定義預設根物件，則分佈根的請求會通過您的原始伺服器。如果您使用 Amazon S3，有可能傳回以下任何情況：
+ **Amazon S3 儲存貯體內容的清單** — 在任何以下條件，使用 CloudFront 存取分佈的任何人都可看到您原始伺服器的內容：
  + 您的儲存貯體未設定正確。
  + 儲存貯體上的 Amazon S3 許可與您的分佈相關連，且在儲存貯體中物件上把存取權限給予*每個人*。
  + 最終使用者使用原始伺服器根 URL 存取原始伺服器。
+ **原始伺服器的私有內容清單** — 如果您配置原始伺服器做為私有分佈 (只有您與 CloudFront 有存取權限)，有登入資料通過 CloudFront 來存取分佈的任何人都可以看到與分佈相關連的 Amazon S3 儲存貯體內容。在這種情況下，使用者無法透過您的原始伺服器根 URL 來存取您的內容。如需有關分佈私有內容的詳細資訊，請參閱[使用已簽署 URL 和已簽署 Cookie 提供私有內容](PrivateContent.md)。
+ `Error 403 Forbidden` — CloudFront 傳回此錯誤，如果許可在與分佈相關連的 Amazon S3 儲存貯體中，或許可在拒絕存取 CloudFront 和所有人的儲存貯體裡物件上。