Intégration legacy de Cloudflare Workers

Cette page de documentation concerne la version dépréciée de notre intégration Cloudflare Workers et est conservée à des fins d'archivage. En particulier, cette version legacy ne peut pas exécuter les triggers et actions avancés, et ne supporte pas les paramètres associés aux règles. Nous vous conseillons vivement d'utiliser plutôt la version actuelle de notre intégration Cloudflare Worker.

Cette version a été dépréciée le 2 septembre 2020

Afin d'utiliser l'intégration legacy de redirection.io avec Cloudflare Workers :

  1. créez un compte redirection.io ;
  2. créez une organisation et un projet redirection.io. À cette étape, vous voudrez peut-être inviter vos collaborateurs ;
  3. rendez-vous sur l'écran "instances" de votre projet et localisez votre "clé de projet" en cliquant sur "Configurer sur votre infrastructure"
  4. Cloudflare Workers menuconnectez-vous à votre compte Cloudflare, puis cliquez sur le menu "Workers" et appuyez sur le bouton "Lancer l'éditeur" ;
  5. Cloudflare Workers editordans la partie gauche de l'éditeur, collez notre code Cloudflare Worker redirection.io, et remplacez le jeton de projet par votre propre valeur ;
  6. appuyez sur le bouton "Enregistrer" en bas de l'éditeur ;
  7. Cloudflare Workers route tabdans l'onglet "Routes", activez ce Cloudflare Worker pour l'ensemble de votre site web.

Une fois toutes ces étapes terminées, vous devriez commencer à voir les journaux de trafic dans votre manager redirection.io. Vous êtes prêt :-)

Code du worker Cloudflare redirection.io legacy

Cette section de documentation concerne la version dépréciée de notre intégration Cloudflare Workers et est conservée à des fins d'archivage. En particulier, cette version dépréciée ne peut pas exécuter les déclencheurs et actions avancés. Nous vous conseillons vivement d'utiliser plutôt la version actuelle de notre intégration Cloudflare Worker.

addEventListener('fetch', event => {
  event.respondWith(redirectAndLog(event.request))
})

const options = {
  token: 'PASTE YOUR PROJECT TOKEN HERE',
  timeout: 2000,
}

async function redirectAndLog(request) {
  const [response, ruleId] = await redirectOrPass(request)
  log(request, response, ruleId)

  return response
}

async function redirectOrPass(request) {
  const urlObject = new URL(request.url)
  const context = {
    host: urlObject.host,
    request_uri: urlObject.pathname + urlObject.search,
    user_agent: request.headers.get('user-agent'),
    referer: request.headers.get('referer'),
    scheme: urlObject.protocol.includes('https') ? 'https' : 'http',
    use_json: true,
  }

  let response

  try {
    response = await Promise.race([
      fetch('https://proxy.redirection.io/' + options.token + '/get', {
        method: 'POST',
        body: JSON.stringify(context),
        headers: {
          'User-Agent': 'cloudflare-service-worker/0.0.1'
        },
      }),
      new Promise((_, reject) =>
        setTimeout(() => reject(new Error('Timeout')), options.timeout)
      ),
    ])
  } catch (error) {
    return [await fetch(request), null]
  }

  const data = await response.text()

  try {
    response = JSON.parse(data)
  } catch (error) {
    // If some errors play regular request, anyway request will be in error when no redirection (404)
    return [await fetch(request), null]
  }

  // Send gone response
  if (response.status_code === 410) {
    return [new Response('', { status: 410 }), response.matched_rule.id]
  }

  // Send redirection response
  return [new Response('', {
    status: Number(response.status_code),
    headers: {
      Location: response.location,
    },
  }),
  response.matched_rule.id]
}

async function log(request, response, ruleId) {
  const urlObject = new URL(request.url)
  const context = {
    status_code: response.status,
    host: urlObject.host,
    method: request.method,
    request_uri: urlObject.pathname + urlObject.search,
    user_agent: request.headers.get('user-agent'),
    referer: request.headers.get('referer'),
    scheme: urlObject.protocol.includes('https') ? 'https' : 'http',
    use_json: true,
  }

  if (response.headers.get('Location')) {
    context.target = response.headers.get('Location');
  }

  if (ruleId) {
    context.rule_id = ruleId;
  }

  try {
    return await fetch(
      'https://proxy.redirection.io/' + options.token + '/log',
      {
        method: 'POST',
        body: JSON.stringify(context),
        headers: {
          'User-Agent': 'cloudflare-service-worker/0.0.1'
        },
      }
    )
  } catch (error) {
    // Do nothing, do not matters if some logs are in errors
    console.log('could not log')
    console.log(error)
  }
}
Cette page a été mise à jour le 30 juin 2025
Vous ne trouvez pas votre réponse ?