nginx 301使用query_string变量重定向,如果

时间:2015-02-05 20:44:37

标签: 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-name/new-product-name.html? permanent;
}

这看起来怎么样?我知道if在nginx中主要是一个坏主意,但我不完全理解为什么。以上规则可以吗?它似乎工作正常。最后,我有大约100个这些网址重定向。是否可以为每个网址复制此规则?

由于


更新
映射看起来是一个很好的解决方案,但我不确定在何处放置代码。我目前有以下内容:

location / {
    try_files $uri $uri/ @modx-rewrite;
}

声明需要在此位置块之前放置任何其他规则。

1 个答案:

答案 0 :(得分:3)

我建议使用ngx_http_map_module

为urlmapping创建一个文件,其中包含旧网址和新网址,例如

/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;
        }
    }
}