From 5a1d5c49bbc30d8fc8654a47216341a2bf53d6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BA=A7n=20Kim=20T=C3=ADn?= Date: Wed, 30 Jul 2025 00:14:02 +0700 Subject: [PATCH] fix bug --- worker.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/worker.js b/worker.js index e945e6d..73fdc8c 100644 --- a/worker.js +++ b/worker.js @@ -7,14 +7,18 @@ async function handleRequest(request) { if (baseUrlParam) { // Nếu là request chính, dùng `url` param để xác định target targetUrl = new URL(baseUrlParam); + // Ghép thêm toàn bộ query params trừ `url` for (const [key, value] of originalUrl.searchParams.entries()) { if (key !== "url") { targetUrl.searchParams.append(key, value); } } - // Ghép path từ request - targetUrl.pathname = originalUrl.pathname; + + // Chỉ ghi đè pathname nếu url gốc không có path + if (new URL(baseUrlParam).pathname === "/" || new URL(baseUrlParam).pathname === "") { + targetUrl.pathname = originalUrl.pathname; + } } else { // Nếu không có `url` param → xử lý như request phụ (JS/CSS từ SPA) const referer = request.headers.get("referer"); @@ -29,7 +33,13 @@ async function handleRequest(request) { } targetUrl = new URL(refBase); - targetUrl.pathname = originalUrl.pathname; + + // Chỉ ghi đè nếu url base là `/` + if (new URL(refBase).pathname === "/" || new URL(refBase).pathname === "") { + targetUrl.pathname = originalUrl.pathname; + } + + // Giữ nguyên query string nếu có targetUrl.search = originalUrl.search; } @@ -56,7 +66,7 @@ async function handleRequest(request) { const proxyReq = new Request(targetUrl.toString(), init); const proxiedRes = await fetch(proxyReq); - const res = new Response(proxiedRes.body, proxiedRes); // Stream lại y chang + const res = new Response(proxiedRes.body, proxiedRes); const reqAllowHeaders = request.headers.get("Access-Control-Request-Headers"); const allowHeaders = reqAllowHeaders ? reqAllowHeaders : "Content-Type";