我已经部署了一个实时网站,并尝试将一些原始 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
指令与查询字符串不匹配。因此您必须采取其他措施。
我猜你有一个大的有很多这样的,所以我建议使用几个map
s。 例如:
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
smap
必须位于您的http
块中,而不是块内server
。如果您托管多个网站,我认为将它们放置的最佳位置是紧挨着server
它们对应的块之前。