重新導向和重寫範例參考 - AWS Amplify 託管

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

重新導向和重寫範例參考

本節包含各種常見重新導向案例的範例程式碼。您可以使用這些範例來了解建立您自己的重新導向和重寫的語法。

注意

原始地址網域比對不區分大小寫。

簡單重新導向和重寫

您可以使用以下範例程式碼,將特定頁面永久重新導向到新的地址。

原始地址 目的地地址 重新導向類型 國家代碼

/original.html

/destination.html

permanent redirect (301)

JSON [{"source": "/original.html", "status": "301", "target": "/destination.html", "condition": null}]

您可以使用以下範例程式碼,將資料夾下的任何路徑重新導向到不同資料夾下的相同路徑。

原始地址 目的地地址 重新導向類型 國家代碼

/docs/<*>

/documents/<*>

permanent redirect (301)

JSON [{"source": "/docs/<*>", "status": "301", "target": "/documents/<*>", "condition": null}]

您可以使用以下範例程式碼,將所有流量重新導向到 index.html 做為重寫。在此情況下,重寫會讓使用者以為他們已抵達原始地址。

原始地址 目的地地址 重新導向類型 國家代碼

/<*>

/index.html

rewrite (200)

JSON [{"source": "/<*>", "status": "200", "target": "/index.html", "condition": null}]

您可以使用以下範例程式碼,使用重寫來變更要向使用者顯示的子網域。

原始地址 目的地地址 重新導向類型 國家代碼

https://mydomain.com

https://www.mydomain.com

rewrite (200)

JSON [{"source": "https://mydomain.com", "status": "200", "target": "https://www.mydomain.com", "condition": null}]

您可以使用下列範例程式碼,以路徑字首重新導向至不同的網域。

原始地址 目的地地址 重新導向類型 國家代碼

https://mydomain.com

https://www.mydomain.com/documents

temporary redirect (302)

JSON [{"source": "https://mydomain.com", "status": "302", "target": "https://www.mydomain.com/documents/", "condition": null}]

您可以使用下列範例程式碼,將找不到的資料夾下的路徑重新導向至自訂 404 頁面。

原始地址 目的地地址 重新導向類型 國家代碼

/<*>

/404.html

not found (404)

JSON [{"source": "/<*>", "status": "404", "target": "/404.html", "condition": null}]

單一頁面 Web 應用程式的重新導向 (SPA)

大多數SPA架構支援HTML5歷史記錄。pushState() 可變更瀏覽器位置,而不啟動伺服器請求。這對於從根目錄 (或 /index.html) 開始導覽的使用者有效,但對於直接導覽至任何其他頁面的使用者則無效。

下列範例使用規則運算式,將所有檔案的 200 重寫設定為 index.html,但規則運算式中指定的副檔名除外。

原始地址 目的地地址 重新導向類型 國家代碼

</^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|woff2|ttf|map|json|webp)$)([^.]+$)/>

/index.html

200

JSON [{"source": "</^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|woff2|ttf|map|json|webp)$)([^.]+$)/>", "status": "200", "target": "/index.html", "condition": null}]

反向代理重寫

下列範例使用從另一個位置重寫以代理內容,讓網域未變更的使用者看到它。

原始地址 目的地地址 重新導向類型 國家代碼

/images/<*>

https://images.otherdomain.com/<*>

rewrite (200)

JSON [{"source": "/images/<*>", "status": "200", "target": "https://images.otherdomain.com/<*>", "condition": null}]

追蹤斜線並清潔 URLs

為了像 about 而不是 about.html 一樣建立乾淨的URL結構,Hugo 等靜態網站產生器會為具有 index.html (/about/index.html) 的頁面產生目錄。Amplify 會視需要URLs新增尾斜線,自動建立清除。下表重點說明不同的案例:

瀏覽器中的使用者輸入 URL 地址列中的 提供的文件

/about

/about

/about.html

/about (when about.html returns 404)

/about/

/about/index.html

/about/

/about/

/about/index.html

預留位置

您可以使用以下範例程式碼,將資料夾結構中的路徑重新導向到另一個資料夾中的相符結構。

原始地址 目的地地址 重新導向類型 國家代碼

/docs/<year>/<month>/<date>/<itemid>

/documents/<year>/<month>/<date>/<itemid>

permanent redirect (301)

JSON [{"source": "/docs/<year>/<month>/<date>/<itemid>", "status": "301", "target": "/documents/<year>/<month>/<date>/<itemid>", "condition": null}]

查詢字串和路徑參數

您可以使用以下範例程式碼,將路徑重新導向至具有的名稱符合原始地址中查詢字串元素值的資料夾:

原始地址 目的地地址 重新導向類型 國家代碼

/docs?id=<my-blog-id-value

/documents/<my-blog-post-id-value>

permanent redirect (301)

JSON [{"source": "/docs?id=<my-blog-id-value>", "status": "301", "target": "/documents/<my-blog-id-value>", "condition": null}]

注意

Amplify 會將所有查詢字串參數轉送到 301 和 302 重新導向的目的地路徑。不過,如果原始地址包含設定為特定值的查詢字串,如本範例所示,Amplify 不會轉送查詢參數。在此情況下,重新導向僅適用於具有指定查詢值 的目的地地址請求id

您可以使用下列範例程式碼,將所有在資料夾結構指定層級找不到的路徑重新導向至指定資料夾中的 index.html。

原始地址 目的地地址 重新導向類型 國家代碼

/documents/<folder>/<child-folder>/<grand-child-folder>

/documents/index.html

not found (404)

JSON [{"source": "/documents/<x>/<y>/<z>", "status": "404", "target": "/documents/index.html", "condition": null}]

區域型重新導向

您可以使用以下範例程式碼,根據區域來重新導向請求。

原始地址 目的地地址 重新導向類型 國家代碼

/documents

/documents/us/

temporary redirect (302)

<US>

JSON [{"source": "/documents", "status": "302", "target": "/documents/us/", "condition": "<US>"}]

在重新導向和重寫中使用萬用字元表達式

您可以在原始地址<*>中使用萬用字元表達式 進行重新導向或重寫。您必須將運算式放在原始地址的結尾,而且必須是唯一的。Amplify 會忽略包含多個萬用字元表達式的原始地址,或在不同的位置使用它。

以下是具有萬用字元表達式的有效重新導向範例。

原始地址 目的地地址 重新導向類型 國家代碼

/docs/<*>

/documents/<*>

permanent redirect (301)

下列兩個範例示範使用萬用字元表達式的無效重新導向。

原始地址 目的地地址 重新導向類型 國家代碼

/docs/<*>/content

/documents/<*>/content

permanent redirect (301)

/docs/<*>/content/<*>

/documents/<*>/content/<*>

permanent redirect (301)