Nginx使用last_path_component的一部分重定向



我根据URI中的内容从domain1重定向到domain2,但我只需要将最后一个路径组件的第一部分传递到domain2。

要重定向的主要入口点是:

https://www.domain1.com/us/type-a-products/**9011 HWD螺栓新**

新终点:

https://www.domain2.com/us-us/type-a-products/**9011**

所以我只需要考虑在第一个hypen(基本上是产品代码(之前的最后一个组件的第一部分。

重定向很容易做到:

if ($request_uri ~* "([^/]*$)" ) {
set  $last_path_component  $1;
}
location ~ /us/type-a-products/(.*) {
return 301 https://www.domain2.com/us-us/type-a-products/$1;
}

但是,我怎么能只考虑最后一个路径组件的第一部分(尝试了不同的regexs,但我只提取了最后一个连字符之后的单词(。

任何帮助都将不胜感激!

一个很好的地方是在地图中。它发生在nginx周期的早期,不会通过引入regex位置。

服务器配置之外

map $uri $redirect_id_uri {
~^/us/type-a-products/**(?<id>d+)-.***$ https://www.domain2.com/us/type-a-products/**$id**;
}

内部服务器配置

if ($redirect_id_uri) {
return 301 $redirect_id_uri;
}

您可以使用

([^/-]+)[^/]*$

请参阅regex演示详细信息

  • ([^/-]+)-组1:除/-之外的任何一个或多个字符
  • [^/]*-除/之外的任何零个或多个字符
  • $—字符串结束

最新更新