Node.Js 301 проблем с перезаписью URL для функции Lambda@Edge - PullRequest
0 голосов
/ 12 марта 2020

перемещая мой сайт c на новый домен, и при этом необходимо удалить последний пункт sh из каждого URL-адреса сайта и отправить ответ 301 с помощью функции Lambda. Вот как это должно выглядеть:

oldsite.com / any-page / будет newsite.com / any-page

Я нашел пример кода, который поможет мне изменить домен, но теперь каждая страница на старом сайте будет указывать на домашнюю страницу нового сайта, игнорируя функцию пути изменения.

Это код, который я сейчас использую, что-то не так для переключателя пути:

'use strict';
exports.handler = (event, context, callback) => {
  /*
   * Generate HTTP redirect response with 301 status code and Location header.
   */

   const request = event.Records[0].cf.request;

   // get the original URL path
   const path = request.uri
   const baseURI = 'https://newsite.com'
// construct the response
   const response = {
      status: '301',
      statusDescription: 'Found',
      headers: {
          location: [{
              key: 'Location',
              value: baseURI,
          }],
      },
  };
// Configure the URL redirects
  switch(path) {
    case /\/.*\//:
      response.headers.location[0].value = baseURI + /\/.*/;
    break;

    default:
      response.headers.location[0].value = baseURI;
   }

  callback(null, response);
};

Кажется, что виновником здесь является Regex с тех пор, как я попробовал фактический путь:

switch(path) {
    case '/foo/':
      response.headers.location[0].value = baseURI + '/foo';
    break;

Работало отлично и сделал выключатель. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 марта 2020

После копания и игры, я управлял реальным кодом, который работает и кажется даже более эффективным, чем оригинальный. Похоже, что делает работу для меня, по крайней мере для этого конкретного c варианта использования. Я могу добавить дополнительные условия по мере необходимости.

'use strict';
exports.handler = (event, context, callback) => {
  /*
   * Generate HTTP redirect response with 301 status code and Location header.
   */

   const request = event.Records[0].cf.request;

   // get the original URL path
   const baseURI = 'https://newsite.com'
   const path = request.uri.replace(/\/$/, '')
   const newURI = baseURI+path
// construct the response
   const response = {
      status: '301',
      statusDescription: 'Found',
      headers: {
          location: [{
              key: 'Location',
              value: newURI,
          }],
      },

  };

  callback(null, response);
};
...