Skip to content

Commit

Permalink
[Rules] New Snippets example: Change origin and modify paths (#18799)
Browse files Browse the repository at this point in the history
---------

Co-authored-by: Pedro Sousa <[email protected]>
  • Loading branch information
nikitacano and pedrosousa authored Dec 17, 2024
1 parent 60b4d38 commit 1d678e6
Showing 1 changed file with 54 additions and 0 deletions.
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` |

0 comments on commit 1d678e6

Please sign in to comment.