NGINX 301 将带参数的 URL 重定向到新 URL

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 的最佳方法是什么,以便它能够正常工作?

答案1

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_productidproductdetails.aspx

smap必须位于您的http块中,而不是块内server。如果您托管多个网站,我认为将它们放置的最佳位置是紧挨着server它们对应的块之前。

相关内容