将域重定向到Meteor中的另一个域

时间:2014-10-14 15:55:44

标签: redirect dns meteor

我有两个域名,一个是我长期使用的域名(blainehansenpianostudio.com),另一个是我正在使用的简化域名(blainehansenpiano.com)。我正在使用Digital Ocean进行托管,我的DNS已设置好,以便两个域都指向我的Droplet,并且两者都显示在我的网站上。

然而,我想blainehansenpianostudio.com(更长,更烦人)完全重定向到blainehansenpiano.com,但目前它只是作为别名,显示相同的网站,但也保持其令人讨厌的长网址。

我唯一能够了解http重定向的内容是this meteorpedia articlestackoverflow question。这些似乎都没有考虑到二级域的存在,并且正在使用应用内路由系统。这似乎不是正确的解决方案,因为即使在捆绑发送到正确之前,重定向也应该发生?我不想在我的应用程序中发生一堆无关的重定向。

此外,SO问题有这一行:

  

实现这一目标的最简单方法是将重定向放在中间件中:

这对我没有任何意义。 “中间件”在哪里?

我该如何完成此操作?我觉得我需要在服务器设置中更改一些内容,但我部署了Meteor Up,它没有提及有关重定向的任何内容,也不确定我需要的服务器配置在哪里。

提前致谢!

更新

我尝试将以下代码放在我的lib/router.js文件中,只是为了测试一下,看看路由器是否是所讨论的“中间件”:

WebApp.connectHandlers
    .use(function(req, res, next) {
        console.log(req);
        console.log(res);
        console.log(next);
        next();
    });

但绝对不是。它刚刚破坏了路由器。

可能(但很乱)解决方案

将此客户端重定向代码放入main.js

if (window.location.href.indexOf("blainehansenpianostudio") > -1) {
    window.location = "http://blainehansenpiano.com";
}

有效,但在重定向后似乎滞后了一会儿。在我看来,这是触发两个完全独立的服务器请求,这根本不是理想的。

2 个答案:

答案 0 :(得分:2)

对于流星应用,您可以使用javascript进行条件重定向。以下示例:

<script type="text/javascript">
<!--
function Redirect() {
    if(window.location.href.indexOf("blainehansenpianostudio") > -1){
       window.location="http://blainehansenpiano.com";
    }
}
//-->
</script>

您是否正在使用任何其他反向代理,例如Apache或Ngnix?如果是这样,可以有更好的方法来实现这一目标。

如果您为服务器端重定向安装Ngnix(这是更简洁的方法),那么您可以包含一个新的服务器块来执行重定向。一个例子如下:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name blainehansenpianostudio.com;
        return 301 $scheme://blainehansenpiano.com$request_uri;
}

在您的情况下,您可以选择将$ scheme硬编码为http。 $ request_uri部分确保原始请求URI包含在重定向响应中。

要设置nginx,我还建议使用@Steffo提供的链接

答案 1 :(得分:1)

我在nginx应用前面使用meteor(也用于SSL终止 - 我看到您在网站上有一个sign-in按钮,因此您可能需要SSL)并且它也在DO上运行。使用单个nginx实例接受对两个域的请求,并将它们反向代理到单个流星实例。我不会在流星应用程序中使用重定向,因为这很容易干扰SSL设置

server {
    listen       443 ssl;
    server_name  www.blainehansenpiano.com;
    ssl_certificate    /etc/ssl/blainehansenpiano.crt
    (... SSL stuff )
    location / {
        proxy_pass http://meteor_localhost-OR-remotehost:3000;
        (... some web socket setting ...)
    }
 }

还有更长的名称指向同一个流星实例

server {
        listen       443 ssl;
        server_name  www.blainehansenpianostudio.com;
        ssl_certificate    /etc/ssl/blainehansenpianostudio.crt
        (... SSL stuff )
        location / {
            proxy_pass http://meteor_localhost-OR-remotehost:3000;
            (... some web socket setting ...)
        }
     }