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

NGINX 301 Перенаправить URL с параметрами на новый URL

Я развернул сайт в реальном времени и пытаюсь перенаправить некоторые из исходных URL-адресов на новые URL-адреса. Я новичок в настройке NGINX для таких редиректов.

Этот работает:

location /contactus.aspx {
    return 301 $scheme://$host/contacts;
}

Они не работают (URL-адрес приводит к ошибке 404 и не перенаправляет):

location /productcatalog.aspx?directoryid=11 {
    return 301 $scheme://$host/hard-drive-cases;
}
location /productdetails.aspx?productid=26* {
    return 301 $scheme://$host/lto-5-blue;
}

Я уже service nginx reload успешно без ошибок.

Самая большая разница между действующими перенаправлениями и неработающими перенаправлениями - это добавленные параметры. Как лучше всего перенаправить URL-адреса с параметрами (и подстановочным знаком в конце), чтобы он работал правильно?

В location директива не соответствует строке запроса. Так что тебе придется заняться чем-нибудь другим.

Я полагаю, у вас есть большой количество из них для работы, поэтому я бы предложил использовать пару maps. Например:

map $arg_directoryid $mycategory {
    11 hard-drive-cases;
    12 some-other-category;
    default ""; # would go to the homepage, change it to go to some other page
}

Тогда вы бы сделали location Такие как:

location /productcatalog.aspx {
    return 301 $scheme://$host/$mycategory;
}

Сделайте второй map и location для $arg_productid соответствующий productdetails.aspx. Однако, если он очень большой, у вас могут быть проблемы с производительностью, и вам нужно отказаться от него и выполнить некоторые сценарии для получения перенаправления из базы данных.

В mapдолжно быть в твоем http блок, не в пределах server блок. Если вы размещаете несколько сайтов, на мой взгляд, лучше всего разместить их непосредственно перед server блок, которому они соответствуют.