使用新域屏蔽子域,同时保留路径

时间:2013-10-02 19:33:24

标签: .htaccess redirect dns subdomain shared-hosting

我拥有一个域名,只是掩盖了名称:

http://mydomain.com

后来我开始在这个域上使用子域进行某个项目。

http://subdomain.mydomain.com

那些项目增长了,现在我有了像

这样的结构
http://subdomain.mydomain.com/project1
http://subdomain.mydomain.com/project2
http://subdomain.mydomain.com/project3/subproject1
http://subdomain.mydomain.com/project3/subproject2
http://subdomain.mydomain.com/project3/subproject3
http://subdomain.mydomain.com/project4
....
etc.

现在我买了一个新域名(shortdomain.com),我计划不移动任何内容,但所有内容都应该通过重定向访问,所以一切都看起来像:

http://shortdomain.com
http://shortdomain.com/project1
http://shortdomain.com/project2
http://shortdomain.com/project3/subproject1
http://shortdomain.com/project3/subproject2
http://shortdomain.com/project3/subproject3
http://shortdomain.com/project4
...
etc.

所以基本上我需要做两件事: 1.如果有人访问我的旧域,请将它们重定向到新的命名结构。即如果有人加载http://subdomain.mydomain.com/project2,则应将其重定向到http://shortdomain.com/project2

  1. 当用户加载/重定向到http://shortdomain.com/project2时,这应该实际加载http://subdomain.mydomain.com/project2
  2. 中的内容

    所以我不会手动迁移其他数据的项目,代码和GB。我认为这可能仅通过智能重定向来实现。

    仅供参考: 1.我对这两个域都有完整的DNS控制权 我在hostgator上托管 3.我在第一个域使用cloudflare并希望继续使用它

2 个答案:

答案 0 :(得分:0)

  

我认为这可能仅通过智能重定向来实现。

不,重定向会更改浏览器位置栏中的内容。如果您重定向到shortdomain.com,则该请求将发送至shortdomain.com,并且与subdomain.mydomain.com无关。如果您重定向回subdomain.mydomain.com,则浏览器中的位置栏也会发生变化。

您真正想要做的是将shortdomain.com指向同一服务器和subdomain.mydomain.com所在的文档根目录。然后使用它来重定向(在htaccess文件或服务器配置中):

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://shortdomain.com/$1 [L,R=301]

如果出于任何荒谬的原因,您无法将shortdomain.com DNS指向提供subdomain.mydomain.com的同一网络服务器,或无法设置该网络服务器接受shortdomain.com的请求主机,您需要设置代理服务器。它会像这样工作:

2个Web服务器,服务器A(托管subdomain.domain.com)和服务器B(托管shortdomain.com)

  1. 有人要求http://subdomain.mydomain.com/project3/subproject1
  2. 服务器A获取请求并将浏览器重定向到http://shortdomain.com/project3/subproject1
  3. 浏览器的位置栏更改为新位置
  4. 服务器B获取请求并将请求反向代理回服务器A
  5. 服务器A再次获取请求 但必须认识到它是代理,然后提供页面而不是重定向
  6. 正如您所看到的,这是一种极其无效的解决方案。您的托管服务也很可能不允许您设置代理服务器。

答案 1 :(得分:0)

  

I have full DNS control of both the domains

完全控制后,我假设你也可以在mod_proxy的Apache网络服务器上启用shortdomain.com完成后,将这一切设置为这样。

subdomain.mydomain.com启用mod_rewrite并将此规则放入Apache configDOCUMENT_ROOT/.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.mydomain\.com$ [NC]
RewriteRule ^ http://shortdomain.com%{REQUEST_URI} [L,R=301]

shortdomain.com启用mod_proxymod_rewrite并将此规则放入Apache configDOCUMENT_ROOT/.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^shortdomain\.com$ [NC]
RewriteRule ^ http://subdomain.mydomain.com%{REQUEST_URI} [L,P]