Как сервер «.html» по определенному URL в Next.js приложение?

#reactjs #next.js #next-router

#reactjs #next.js #далее -маршрутизатор

Вопрос:

У меня есть файл «.html», который мне нужно обслуживать по определенному маршруту в моем Next.js приложение, например, такое…

/pages/customr-route-name/my-html-file.html

Итак, если я перейду на свой веб-сайт и введу http://example.com/custom-route-name/my-html-file.html , я смогу это увидеть

Как я могу это сделать в Next.js ?

Ответ №1:

Для этого требуется маршрут API и перезапись URL-адреса, чтобы начать работать. И самое приятное, что вы сможете использовать этот шаблон и для других целей (например, если вы хотите сгенерировать RSS-канал или sitemap.xml ).

ПРИМЕЧАНИЕ: вам нужно будет запустить Next 9.5, чтобы это сработало.

0. Переместите свой HTML-файл (необязательно)

Ваш файл не обязательно должен находиться в ./pages каталоге. Давайте вставим его ./static вместо этого. Просто замените эти заполнители файла маршрута на ваше реальное имя файла позже: ./static/<route>/<file>.html

1. Создайте маршрут API

Далее позволяет создавать маршруты API, аналогичные тем, которые вы использовали бы на хостах старого типа, таких как Express. Любое имя подходит, пока оно ./pages/api есть. Мы назовем это ./pages/api/static/<route>/<file>.js

 // import

import fs from 'fs';

// vars

const filename = './static/<route>/<file>.html';

// export

export default async function api(req, res) {
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  res.write(await fs.readFileSync(filename, 'utf-8'));
  res.end();
}

  

2. Добавьте перезапись в next.config.js

Далее перезаписи работают аналогично их аналогам apache. Они сопоставляют местоположение URL-адреса со следующим ./page .

 // export

module.exports = {
  rewrites: async () => [
    {source: '/<route>/<file>', destination: './pages/api/static/<route>/<file>'},
  ],
};
  

3. Запустите его!

Вы должны иметь возможность протестировать это с помощью обычного next dev . Конечно, изменения next.config.js потребуют от вас ручной перезагрузки сервера разработки.

Если вы посмотрите на следующие документы, вы увидите, что вы можете использовать подстановочные знаки как в маршрутах API, так и в этих перенаправлениях, что может помочь с направлением, в котором вы движетесь.

Ответ №2:

Обновление для NextJS версии 11

В вашей public папке вы можете создать структуру папок по образцу нужного вам URL-адреса.

Например:

 public/custom-path-folder-name/file.html
  

будет обслуживаться по адресу:

 http://localhost:3000/custom-path-folder-name/file.html
  

Для получения дополнительной информации см. Документы nextjs для статического обслуживания файлов