Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect nginx 301使用query_字符串变量和if重定向_Redirect_Nginx - Fatal编程技术网

Redirect nginx 301使用query_字符串变量和if重定向

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-

我是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-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。不幸的是,我无法访问服务器块之外的内容,因此无法使用此解决方案。我把它设置为公认的答案,尽管它看起来很完美。我愿意接受其他建议。