#javascript #redirect #cloudflare #cloudflare-workers
#javascript #перенаправление #cloudflare #cloudflare-workers
Вопрос:
Мне нужно настроить запросы, соответствующие domain1.com/test // шаблон будет обслуживаться domain2.com применение. Попытался настроить его следующим образом. Создал worker, добавил код
»’
const redirectMap = new Map([
['/test1', 'domain2.com'],
])
addEventListener('fetch', async event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
let requestURL = new URL(request.url)
let path = requestURL.pathname.split('/redirect')[1]
let location = redirectMap.get(path)
if (location) {
return Response.redirect(location, 301)
}
return fetch(request)
}
»’
После этого в настройках домена я добавил worker и указал сайт domain1.com/test /*. Но это не сработало. Помогите, пожалуйста. Использует инструкции https://www.cloudsavvyit.com/3660/how-to-create-a-cloudflare-worker-to-redirect-requests /
Ответ №1:
У вас есть 2 варианта добавления перенаправлений в Cloudflare: правила страницы и рабочие.
В обоих случаях DNS-записи исходного домена должны быть проксированы (включено оранжевое облако).
Рабочие
-
Откройте страницу исходного домена в Cloudflare dashboard.
-
Перейдите на
Workers
вкладку. -
Manage Workers
->
Create a Worker
-
Добавьте следующий код. При совпадении путей он перенаправит посетителя на целевой URL. Если нет совпадения, запрос будет отправлен в источник (source-domain.com ).
const redirectHttpCode = 301
const redirectMap = new Map([
['/redirecting-path', 'https://target-domain.com'],
])
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
const url = new URL(request.url)
const { pathname } = url
const targetUrl = redirectMap.get(pathname)
if (targetUrl) {
return Response.redirect(targetUrl, redirectHttpCode)
}
return fetch(request)
}
- Вернитесь на
Workers
вкладку вашего исходного домена->
Add route
. Установите Route*.source-domain.com/*
равным (если вы собираетесь сопоставлять несколько путей перенаправления) или*.source-domain.com/redirecting-path
(если есть только один). Выберите worker, который вы создали на шаге 4.Save
.
Правила страницы
Если вы не вынуждены использовать Workers для перенаправления, вы можете использовать Page Rules
функцию Cloudflare, которая является более простым способом без кода.
-
Откройте страницу исходного домена в Cloudflare dashboard.
-
Перейдите на
Page Rules
вкладку. -
Создайте новое правило страницы. Введите исходный домен в поле URL match. При необходимости вы можете добавить путь. Выберите
301
или302
HTTP-код — в зависимости от того, что имеет смысл в вашем случае. Вот пример конфигурации перенаправления:
Комментарии:
1. Спасибо за совет. Я знал об этой возможности. Но я вынужден использовать workers. Если я не найду, как это реализовать через workers, я сделаю этот метод
2. Похоже, что подход workers не работает ни с чем, кроме страницы index / default.
3. @Bangkokian это должно сработать, по крайней мере, у меня это работает в паре проектов. Включен ли рабочий на маршруте, с которого вы пытаетесь перенаправить? Если это так, вы можете выполнить отладку из рабочего кода, вернув переменные и проверив вывод в окне предварительного просмотра рядом с кодом. Любопытно узнать, в чем проблема, с которой вы столкнулись.
4. @MaxIvanov Возвращает ошибку 404 для всего, кроме target-domain.com корневая / индексная страница.
5. К сожалению, я не могу помочь без более широкого контекста: точная конфигурация маршрута worker; изменения, внесенные вами в код worker; запрошенный исходный URL и ожидаемый целевой URL.