Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions src/content/docs/rules/snippets/examples/route-and-rewrite.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
type: example
summary: Reroute a request to a different origin and modify the URL path.
goal:
- Routing
operation:
- Modify URL
products:
- Snippets
pcx_content_type: example
title: Change origin and modify paths
description: Route requests to a different origin, prepend a directory to the URL path, and remove specific segments.
---

This example demonstrates how to use Cloudflare Snippets to:

- Reroute incoming requests to a different origin.
- Prepend a directory to the URL path.
- Remove specific segments from the URL path.

```js
export default {
async fetch(request) {
// Clone the original request to create a new request object
const newRequest = new Request(request);

// Add a header to identify a rerouted request at the new origin
newRequest.headers.set("X-Rerouted", "1");

// Clone and parse the original URL
const url = new URL(request.url);

// Step 1: Reroute to a different origin
url.hostname = "example.com"; // Change the hostname to the new origin

// Step 2: Append a directory to the path
url.pathname = `/new-path${url.pathname}`; // Prepend "/new-path" to the current path

// Step 3: Remove a specific segment from the path
url.pathname = url.pathname.replace("/remove-me", ""); // Rewrite `/remove-me/something` to `/something`

// Fetch the modified request from the updated URL
return await fetch(url, newRequest);
},
};
```

This configuration will perform the following rewrites:

| Request URL | URL after rewrite |
| ----------------------------------- | ---------------------------------- |
| `https://subdomain.example.com/foo` | `https://example.com/new-path/foo` |
| `https://example.com/remove-me/bar` | `https://example.com/new-path/bar` |
| `https://example.net/remove-me` | `https://example.com/new-path` |
Loading