ホットリンク保護
他のウェブサイトがあなたのコンテンツにリンクするのをブロックします。これは画像を保護するのに役立ちます。
export default { async fetch(request) { const HOMEPAGE_URL = "https://tutorial.cloudflareworkers.com/"; const PROTECTED_TYPE = "image/";
// 元のリクエストを取得 const response = await fetch(request);
// 画像の場合、Refererヘッダーに基づいてホットリンク保護を行います。 const referer = request.headers.get("Referer"); const contentType = response.headers.get("Content-Type") || "";
if (referer && contentType.startsWith(PROTECTED_TYPE)) { // ホスト名が一致しない場合、ホットリンクです if (new URL(referer).hostname !== new URL(request.url).hostname) { // ユーザーをあなたのウェブサイトにリダイレクトします return Response.redirect(HOMEPAGE_URL, 302); } }
// すべて正常です。通常通りレスポンスを返します。 return response; },};export default { async fetch(request): Promise<Response> { const HOMEPAGE_URL = "https://tutorial.cloudflareworkers.com/"; const PROTECTED_TYPE = "image/";
// 元のリクエストを取得 const response = await fetch(request);
// 画像の場合、Refererヘッダーに基づいてホットリンク保護を行います。 const referer = request.headers.get("Referer"); const contentType = response.headers.get("Content-Type") || "";
if (referer && contentType.startsWith(PROTECTED_TYPE)) { // ホスト名が一致しない場合、ホットリンクです if (new URL(referer).hostname !== new URL(request.url).hostname) { // ユーザーをあなたのウェブサイトにリダイレクトします return Response.redirect(HOMEPAGE_URL, 302); } }
// すべて正常です。通常通りレスポンスを返します。 return response; },} satisfies ExportedHandler;from js import Response, URL, fetch
async def on_fetch(request): homepage_url = "https://tutorial.cloudflareworkers.com/" protected_type = "image/"
# 元のリクエストを取得 response = await fetch(request)
# 画像の場合、refererヘッダーに基づいてホットリンク保護を行います referer = request.headers["Referer"] content_type = response.headers["Content-Type"] or ""
if referer and content_type.startswith(protected_type): # ホスト名が一致しない場合、ホットリンクです if URL.new(referer).hostname != URL.new(request.url).hostname: # ユーザーをあなたのウェブサイトにリダイレクトします return Response.redirect(homepage_url, 302)
# すべて正常です。通常通りレスポンスを返します return response