RedirectRule
A Cloudflare Redirect Rule enables URL redirects and rewrites using Cloudflare’s Rules engine. Supports wildcard redirects, static redirects, and dynamic redirects with expressions.
Minimal Example
Section titled “Minimal Example”Create a basic redirect rule that redirects all requests to a target URL:
import { RedirectRule } from "alchemy/cloudflare";
const redirect = await RedirectRule("basic-redirect", { zone: "example.com", targetUrl: "https://example.com/", statusCode: 301,});
Wildcard Redirect
Section titled “Wildcard Redirect”Redirect from a wildcard pattern to a target URL with placeholders:
import { RedirectRule } from "alchemy/cloudflare";
const wildcardRedirect = await RedirectRule("wildcard-redirect", { zone: "example.com", requestUrl: "https://*.example.com/files/*", targetUrl: "https://example.com/${1}/files/${2}", statusCode: 301, preserveQueryString: true,});
Dynamic Redirect with Expression
Section titled “Dynamic Redirect with Expression”Create complex redirects using Cloudflare’s Rules language for advanced matching:
import { RedirectRule } from "alchemy/cloudflare";
const dynamicRedirect = await RedirectRule("dynamic-redirect", { zone: "example.com", expression: 'http.request.uri.path matches "/autodiscover\\.(xml|src)$"', targetUrl: "https://example.com/not-found", statusCode: 301, preserveQueryString: true,});
Different Status Codes
Section titled “Different Status Codes”Configure redirects with various HTTP status codes:
import { RedirectRule } from "alchemy/cloudflare";
// Temporary redirectconst temporaryRedirect = await RedirectRule("temp-redirect", { zone: "example.com", requestUrl: "https://example.com/temp/*", targetUrl: "https://example.com/new/${1}", statusCode: 302,});
// Permanent redirectconst permanentRedirect = await RedirectRule("perm-redirect", { zone: "example.com", requestUrl: "https://example.com/old/*", targetUrl: "https://example.com/new/${1}", statusCode: 301,});
Query String Handling
Section titled “Query String Handling”Control whether query string parameters are preserved in redirects:
import { RedirectRule } from "alchemy/cloudflare";
// Preserve query strings (default)const preserveQuery = await RedirectRule("preserve-query", { zone: "example.com", requestUrl: "https://example.com/search/*", targetUrl: "https://example.com/find/${1}", preserveQueryString: true,});
// Drop query stringsconst dropQuery = await RedirectRule("drop-query", { zone: "example.com", requestUrl: "https://example.com/old/*", targetUrl: "https://example.com/new/${1}", preserveQueryString: false,});
Using Zone Resource
Section titled “Using Zone Resource”Reference an existing zone resource instead of zone ID:
import { RedirectRule, Zone } from "alchemy/cloudflare";
const zone = await Zone("my-zone", { name: "example.com", type: "full",});
const redirect = await RedirectRule("zone-redirect", { zone: zone, targetUrl: "https://example.com/", statusCode: 301,});