具有多个域的NGINX动态重定向 用例

具有多个域的NGINX动态重定向 用例,nginx,url-rewriting,Nginx,Url Rewriting,我们当前的前端应用程序可由多个域访问: https://boat.com (or https://www.boat.com) https://car.com https://plane.com ... 每个域都在基于域名呈现具有不同内容和主题的相同应用程序 我们现在正试图将所有内容合并到一个唯一的域中。因此,不要使用以前的域访问站点: https://car.com 我们希望使用以下url访问它: https://common.com/car 在代码方面,我们已经注意到了根据这个新的路由系

我们当前的前端应用程序可由多个域访问:

https://boat.com (or https://www.boat.com)
https://car.com
https://plane.com
...
每个域都在基于域名呈现具有不同内容和主题的相同应用程序

我们现在正试图将所有内容合并到一个唯一的域中。因此,不要使用以前的域访问站点:

https://car.com
我们希望使用以下url访问它:

https://common.com/car
在代码方面,我们已经注意到了根据这个新的路由系统更改逻辑以交付正确的内容

问题 当用户尝试从旧域访问应用程序时,我们希望自动将用户重定向到正确的路由。例如:

https://boat.com      => redirect => https://common.com/boat
https://car.com       => redirect => https://common.com/car
...
但我们也希望能够重写更复杂的url:

https://boat.com/categories/name-1     => redirect => https://common.com/boat/categories/name-1
https://car.com/posts/super-title-2    => redirect => https://common.com/car/posts/super-title-2

有没有一种方法可以使用NGINX动态/编程地实现它,而不必为每个域编写和重复规则?

您可以使用

例如:

server {
    listen 80;
    listen 443 ssl;

    ssl_certificate     /path/to/$ssl_server_name.crt;
    ssl_certificate_key /path/to/$ssl_server_name.key;

    server_name   ~^(www\.)?(?<domain>[^.]+)\.com$;
    return 301 https://example.com/$domain$request_uri;
}
boat.com.crt
boat.com.key
www.boat.com.crt
www.boat.com.key
car.com.crt
car.com.key
www.car.com.crt
www.car.com.key

另外,您应该定义一个默认服务器,因为您不希望此服务器块成为您的默认服务器。

谢谢您的回答。我试试看。关于证书,我们已经有了它们(由let's encrypt for Every domains生成),它起作用了,我在您的示例中做了一些调整,但非常感谢您的帮助,因为您,我今天增加了知识:)