我是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;
}
声明需要在此位置块之前放置任何其他规则。
答案 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;
}
}
}