async function handleEvent(event) {const { request } = event;const urlInfo = new URL(request.url);// 正規表現で/test/の後にスラッシュ以外のパスセグメントが1つまたは2つ続くパターンにマッチします。const regexp = /^\\/test\\/([^\\/]+)(?:\\/([^\\/]+))?\\/?$/;// パスが正規表現に一致するかどうかを確認します。if (regexp.test(urlInfo.pathname)) {const matches = urlInfo.pathname.match(regexp);let newPathname = '/test/';// マッチしたパスセグメントの数に応じて、新しいパス名を1つまたは2つ構築します。newPathname += matches[1]; // 最初のパスセグメントif (matches[2]) {newPathname += '/' + matches[2]; // 2番目のパスセグメント(存在する場合)}// 末尾がindex.htmlであることを確認します。newPathname += '/index.html';// URLInfoのpathnameを更新します。urlInfo.pathname = newPathname;}// 更新されたURLInfoを使用してリクエストを送信します。const response = await fetch(urlInfo.toString(), {method: request.method,headers: request.headers,redirect: 'manual',body: request.body,});// レスポンスをイベントに返します。return event.respondWith(response);}// 各fetchイベントに対してhandleEvent関数を呼び出します。addEventListener('fetch', (event) => {handleEvent(event);});
https://www.example.com/test/segment1/index.html へのアクセスを動的に書き換えます。
https://www.example.com/test/segment1/segment2/index.html へのアクセスを動的に書き換えます。

フィードバック