nginx 301 使用 query_string 变量重定向,如果
nginx 301 redirect with query_string variable and if
我是 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 个 url 要重定向。是否可以为每个 url 复制此规则?
谢谢
更新
映射看起来是一个很好的解决方案,但我不确定将代码放在哪里。我目前有以下内容:
location / {
try_files $uri $uri/ @modx-rewrite;
}
声明任何额外的规则都需要放在这个位置块之前。
我建议使用 ngx_http_map_module
为 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;
}
}
}
我是 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 个 url 要重定向。是否可以为每个 url 复制此规则?
谢谢
更新
映射看起来是一个很好的解决方案,但我不确定将代码放在哪里。我目前有以下内容:
location / {
try_files $uri $uri/ @modx-rewrite;
}
声明任何额外的规则都需要放在这个位置块之前。
我建议使用 ngx_http_map_module
为 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;
}
}
}