Redirect nginx 301使用query_字符串变量和if重定向
我是nginx新手,需要设置301重定向负载,将每个旧文件指向新文件,如下所示:Redirect nginx 301使用query_字符串变量和if重定向,redirect,nginx,Redirect,Nginx,我是nginx新手,需要设置301重定向负载,将每个旧文件指向新文件,如下所示: # www.domain.com/products/category/product.php?id=103 # to # www.domain.com/products/new-category-name/new-product-name.html 要处理?问题,我有以下几点似乎很好: if ($args ~ "id=103") { rewrite ^ /products/new-category-
# www.domain.com/products/category/product.php?id=103
# to
# www.domain.com/products/new-category-name/new-product-name.html
要处理?
问题,我有以下几点似乎很好:
if ($args ~ "id=103") {
rewrite ^ /products/new-category-name/new-product-name.html? permanent;
}
这个看起来怎么样?我知道在nginx中,if
通常是个坏主意,但我不完全理解为什么。以上规则行吗?它似乎工作得很好。最后,我有大约100个这样的URL需要重定向。可以为每个url复制此规则吗
谢谢
更新
映射看起来是一个很好的解决方案,但我不确定将代码放在哪里。我目前有以下情况:
location / {
try_files $uri $uri/ @modx-rewrite;
}
需要说明的是,任何附加规则都需要放在此位置块之前。我建议来宾使用ngx\U http\U map\U模块 为urlmapping创建一个包含新旧URL的文件,如
/products/category/product.php?id=103 /products/new-category-name/new-product-name.html ;
/products/category2/product.php?id=104 /products/new-category2-name/new-product104-name.html ;
这很容易维护。只需为新映射添加新行并重新加载nginx配置
在nginx配置中,创建一个具有如下映射的位置
map $request_uri $newuri {
include /path/to/your/mappingfile;
}
server {
...
location / {
if ($newuri) {
return 301 $newuri;
}
}
}
这是一个好主意,但是map指令需要在服务器块之外。这看起来很好,但我不确定该放在哪里。我已经用更多信息更新了我的问题,非常感谢@hzei。不幸的是,我无法访问服务器块之外的内容,因此无法使用此解决方案。我把它设置为公认的答案,尽管它看起来很完美。我愿意接受其他建议。