Проблемы перезаписи URL-адреса Node.Js 301 для функции Lambda@Edge

перемещение моего статического сайта в новый домен, и при этом необходимо удалить последнюю косую черту с каждого 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);
};

Виновником здесь, кажется, является регулярное выражение, так как я попробовал реальный путь:

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

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


person Burchas    schedule 12.03.2020    source источник


Ответы (1)


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

'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);
};
person Burchas    schedule 19.03.2020