```javascript const ROUTES = { "/": "https://megasergipe.my.canva.site/", "/gabi/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/Gabi/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/gabriela/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/Gabriela/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/coisasdegabriela/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/CoisasDeGabriela/": "https://megasergipe.my.canva.site/coisasdegabriela/", "/artesdagabi/": "https://megasergipe.my.canva.site/artesdagabi", "/Artesdagabi/": "https://megasergipe.my.canva.site/artesdagabi", "/ArtesdaGabi/": "https://megasergipe.my.canva.site/artesdagabi", "/artesdagabriela/": "https://megasergipe.my.canva.site/artesdagabi", "/ArtesdaGabriela/": "https://megasergipe.my.canva.site/artesdagabi", "/ArtesDaGabi/": "https://megasergipe.my.canva.site/artesdagabi", "/ArtesDaGabriela/": "https://megasergipe.my.canva.site/artesdagabi", "/adenilson/": "https://adenilsonbatista.my.canva.site/", "/Adenilson/": "https://adenilsonbatista.my.canva.site/", "/adenilsonbatista/": "https://adenilsonbatista.my.canva.site/", "/AdenilsonBatista/": "https://adenilsonbatista.my.canva.site/" }; const DEFAULT_TARGET = "https://megasergipe.my.canva.site/"; function getTarget(pathname) { return ROUTES[pathname] || null; } function buildTarget(target, incomingUrl) { const targetUrl = new URL(target); // Mantém parâmetros da URL original. incomingUrl.searchParams.forEach((value, key) => { targetUrl.searchParams.set(key, value); }); return targetUrl; } function copyHeaders(original) { const headers = new Headers(original); // O conteúdo será entregue pelo nosso domínio. headers.delete("location"); headers.delete("content-security-policy"); headers.delete("content-security-policy-report-only"); return headers; } async function proxy(request, targetUrl) { const method = request.method; const headers = new Headers(request.headers); // Evita que o destino tente interpretar a requisição // como se fosse diretamente para o domínio do visitante. headers.set("Host", targetUrl.host); const init = { method, headers, redirect: "manual" }; if (method !== "GET" && method !== "HEAD") { init.body = request.body; } const upstreamRequest = new Request(targetUrl.toString(), init); let response = await fetch(upstreamRequest); /* * Alguns sites podem responder com redirect. * Neste caso, convertemos o destino do Location * para a URL mascarada sempre que possível. */ const location = response.headers.get("Location"); if (location) { const locationUrl = new URL(location, targetUrl); if ( locationUrl.hostname === targetUrl.hostname || locationUrl.hostname.endsWith(".canva.site") ) { const publicUrl = new URL(request.url); publicUrl.pathname = locationUrl.pathname; publicUrl.search = locationUrl.search; const redirectHeaders = new Headers(response.headers); redirectHeaders.set("Location", publicUrl.toString()); return new Response(null, { status: response.status, statusText: response.statusText, headers: redirectHeaders }); } } /* * Para HTML, reescrevemos referências ao domínio * externo para manter a navegação dentro do domínio * megasergipe.com.br. */ const contentType = response.headers.get("content-type") || ""; if (contentType.toLowerCase().includes("text/html")) { const publicOrigin = new URL(request.url).origin; const externalOrigin = targetUrl.origin; const rewriter = new HTMLRewriter() .on("a", new URLRewriter("href", externalOrigin, publicOrigin)) .on("form", new URLRewriter("action", externalOrigin, publicOrigin)) .on("img", new URLRewriter("src", externalOrigin, publicOrigin)) .on("script", new URLRewriter("src", externalOrigin, publicOrigin)) .on("link", new URLRewriter("href", externalOrigin, publicOrigin)) .on("source", new URLRewriter("src", externalOrigin, publicOrigin)); const headersOut = copyHeaders(response.headers); return new Response( rewriter.transform(response).body, { status: response.status, statusText: response.statusText, headers: headersOut } ); } return new Response(response.body, { status: response.status, statusText: response.statusText, headers: copyHeaders(response.headers) }); } class URLRewriter { constructor(attribute, externalOrigin, publicOrigin) { this.attribute = attribute; this.externalOrigin = externalOrigin; this.publicOrigin = publicOrigin; } element(element) { const value = element.getAttribute(this.attribute); if (!value) { return; } try { const url = new URL(value, this.externalOrigin); if (url.origin === this.externalOrigin) { element.setAttribute( this.attribute, this.publicOrigin + url.pathname + url.search + url.hash ); } } catch { // Mantém referências que não são URLs válidas. } } } export default { async fetch(request) { const incomingUrl = new URL(request.url); /* * Primeiro tenta encontrar uma rota exata. */ let target = getTarget(incomingUrl.pathname); /* * Se for uma subpágina de uma das rotas, * mantém o mesmo site de destino. */ if (!target) { if ( incomingUrl.pathname.startsWith("/gabi/") || incomingUrl.pathname.startsWith("/Gabi/") || incomingUrl.pathname.startsWith("/gabriela/") || incomingUrl.pathname.startsWith("/Gabriela/") || incomingUrl.pathname.startsWith("/coisasdegabriela/") || incomingUrl.pathname.startsWith("/CoisasDeGabriela/") ) { target = "https://megasergipe.my.canva.site/coisasdegabriela/"; } if ( incomingUrl.pathname.startsWith("/artesdagabi/") || incomingUrl.pathname.startsWith("/Artesdagabi/") || incomingUrl.pathname.startsWith("/ArtesdaGabi/") || incomingUrl.pathname.startsWith("/artesdagabriela/") || incomingUrl.pathname.startsWith("/ArtesdaGabriela/") || incomingUrl.pathname.startsWith("/ArtesDaGabi/") || incomingUrl.pathname.startsWith("/ArtesDaGabriela/") ) { target = "https://megasergipe.my.canva.site/artesdagabi"; } if ( incomingUrl.pathname.startsWith("/adenilson/") || incomingUrl.pathname.startsWith("/Adenilson/") || incomingUrl.pathname.startsWith("/adenilsonbatista/") || incomingUrl.pathname.startsWith("/AdenilsonBatista/") ) { target = "https://adenilsonbatista.my.canva.site/"; } } /* * Rota desconhecida: * deixa o Pages atual tratar do 404. */ if (!target) { return new Response("Página não encontrada.", { status: 404, headers: { "content-type": "text/plain; charset=UTF-8" } }); } const targetUrl = buildTarget(target, incomingUrl); return proxy(request, targetUrl); } }; ```