diff --git a/advanced/subpath/cloudflare.mdx b/advanced/subpath/cloudflare.mdx index 6fa9ea7c5..e290dd276 100644 --- a/advanced/subpath/cloudflare.mdx +++ b/advanced/subpath/cloudflare.mdx @@ -85,3 +85,56 @@ If your domain already points to another service, you must remove the existing D 1. Delete the existing DNS record for your domain. See [Delete DNS records](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/#delete-dns-records) in the Cloudflare documentation for more information. 2. Return to your Worker and add your custom domain. + +## Webflow custom routing +If you use Webflow to host your main site and want to serve Mintlify docs at `/docs` on the same domain, you'll need to configure custom routing through Cloudflare Workers to proxy all non-docs traffic to your main site. + + + Make sure your main site is set up on a landing page before deploying this Worker, or visitors to your main site will see errors. + + +1. In Webflow, set up a landing page for your main site like `landing.yoursite.com`. This will be the page that visitors see when they visit your site. +2. Deploy your main site to the landing page. This ensures that your main site remains accessible while you configure the Worker. +3. To avoid conflicts, update any absolute URLs in your main site to be relative. +4. In Cloudflare, select **Edit Code** and add the following script into your Worker's code. + + Replace `[SUBDOMAIN]` with your unique subdomain, `[YOUR_DOMAIN]` with your website's base URL, and `[LANDING_DOMAIN]` with your landing page URL. + + ```javascript + addEventListener("fetch", (event) => { + event.respondWith(handleRequest(event.request)); + }); + async function handleRequest(request) { + try { + const urlObject = new URL(request.url); + // If the request is to the docs subdirectory + if (/^\/docs/.test(urlObject.pathname)) { + // Proxy to Mintlify + const DOCS_URL = "[SUBDOMAIN].mintlify.dev"; + const CUSTOM_URL = "[YOUR_DOMAIN]"; + let url = new URL(request.url); + url.hostname = DOCS_URL; + let proxyRequest = new Request(url, request); + proxyRequest.headers.set("Host", DOCS_URL); + proxyRequest.headers.set("X-Forwarded-Host", CUSTOM_URL); + proxyRequest.headers.set("X-Forwarded-Proto", "https"); + return await fetch(proxyRequest); + } + // Route everything else to main site + const MAIN_SITE_URL = "[LANDING_DOMAIN]"; + if (MAIN_SITE_URL && MAIN_SITE_URL !== "[LANDING_DOMAIN]") { + let mainSiteUrl = new URL(request.url); + mainSiteUrl.hostname = MAIN_SITE_URL; + return await fetch(mainSiteUrl, { + method: request.method, + headers: request.headers, + body: request.body + }); + } + } catch (error) { + // If no action found, serve the regular request + return await fetch(request); + } + } + ``` +5. Select Deploy and wait for the changes to propagate, which can take up to a few hours.