重定向到子域名 URL,同时保留原始 URL 并从子域名 URL 提供文件

重定向到子域名 URL,同时保留原始 URL 并从子域名 URL 提供文件

我想访问 www.example.com 并重定向到 subdomain.example.com/homepage,但网址无需从 www.example.com 更改。

问题是我的 css 和 js 托管在 subdomain.example.com 上。最后一部分让我很头疼。到目前为止,我有以下内容:

http {
    upstream meteor_server {
        ip_hash;
        server 192.168.0.24:88;
    }
    server {
        server_name www.example.com;
        location / {
            proxy_pass http://meteor_server/homepage/;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    server {
        server_name subdomain.example.com;
        location / {
            proxy_pass http://meteor_server/;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

这样,当我访问 www.example.com 时,我就可以访问子域,它尝试下载的每个 css 和 js 文件都会出现 404 错误。我知道有更好的方法可以做到这一点,但在我们的用例中,这似乎是最干净的。虽然我愿意接受任何想法,但使用 nginx 的解决方案是有利的。

答案1

修复 Nginx 问题会很好,但我不确定这是否是特别适合使用 nginx 的方法。我没能搞清楚,所以对于遇到这个问题的人,以下是我在 Meteor 中使用 Iron-Router 解决它的方法。

Meteor.startup(function () {
  if (Meteor.isClient) {
  var hostnameArray = document.location.hostname.split(".");
    if (hostnameArray[0] === "www") {
      Router.route("home", {template: "www-homepage"});
    }
    else {
      Router.route("home", {template: "subdomain-homepage"});
    }
  }
}

希望这对其他人有用。归功于凯文彼得 来自这个 GitHub 问题

相关内容