Назад | Перейти на главную страницу

Nginx: как после удаления суффиксов .html перенаправить все запросы на новые URL-адреса?

Я хочу оптимизировать структуру ссылок старой системы магазинов Magento. До сих пор при создании статических страниц к соответствующему пути добавлялся суффикс .html. Из-за более ранней проблемы даже существовали пути с двойными суффиксами (например, .html.html). Теперь, когда я отключил использование суффиксов и удалил все пути с двойными суффиксами из базы данных, я хочу настроить автоматическое перенаправление со старых URL-адресов на новые.

Чтобы сохранить существующие гиперссылки и записи поисковой системы, я хочу, чтобы Nginx перенаправлял все запросы страниц с суффиксом .html или .html.html на новый путь.

Запросы к:

example.org/banana.html
example.org/banana.html.html

должен быть перенаправлен на:

example.org/banana

так актуально, мое лучшее предположение:

location / {
  rewrite ^(.*?)\.html(\.html)?$ $1 permanent;
  try_files $uri $uri.html $uri.html.html $uri/ =404;
}

Как достичь своей цели и какие правила перезаписи мне нужно добавить в конфигурацию nginx?

Используйте только один try_files заявление внутри location блок. В файл термины могут быть добавлены по мере необходимости. Включите $uri термин для соответствия тем URI, которые напрямую соответствуют статическим файлам (например, .css и .js). Включите $uri/ термин, если вы хотите использовать index директива.

Например:

try_files $uri $uri.html $uri.html.html $uri/ =404;

Видеть этот документ для подробностей.


В rewrite инструкции неверны, поскольку первый всегда будет соответствовать URI, предназначенному для второго. Кроме того, перезаписи захватывают ведущие / в $1 переменная, поэтому, используя /$1 вы добавляете дополнительный ведущий /.

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

rewrite ^(.*?)\.html(\.html)?$ $1 permanent;