我有两个域名,一个是我长期使用的域名(blainehansenpianostudio.com),另一个是我正在使用的简化域名(blainehansenpiano.com)。我正在使用Digital Ocean进行托管,我的DNS已设置好,以便两个域都指向我的Droplet,并且两者都显示在我的网站上。
然而,我想blainehansenpianostudio.com(更长,更烦人)完全重定向到blainehansenpiano.com,但目前它只是作为别名,显示相同的网站,但也保持其令人讨厌的长网址。
我唯一能够了解http重定向的内容是this meteorpedia article和stackoverflow 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";
}
有效,但在重定向后似乎滞后了一会儿。在我看来,这是触发两个完全独立的服务器请求,这根本不是理想的。
答案 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 ...)
}
}