2

我很久以前就拥有一个域,只是掩盖了名称:

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

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

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

4

2 回答 2

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.comDNS 指向服务的同一网络服务器subdomain.mydomain.com,或者无法设置该网络服务器以接受对shortdomain.com主机的请求,则需要设置代理服务器。它会像这样工作:

2 个网络服务器,服务器 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再次获取请求,但必须识别它是代理,然后提供页面而不是重定向

如您所见,这是一个非常低效的解决方案。您的托管服务也很有可能不允许您设置代理服务器。

于 2013-10-02T19:51:26.690 回答
0

I have full DNS control of both the domains

通过完全控制,我假设您也可以mod_proxyshortdomain.com. 一旦完成,就以这种方式进行设置。

subdomain.mydomain.com启用mod_rewrite并将此规则放在Apache configOR中DOCUMENT_ROOT/.htaccess

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

shortdomain.com启用mod_proxy时,mod_rewrite将此规则放在Apache configOR中DOCUMENT_ROOT/.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^shortdomain\.com$ [NC]
RewriteRule ^ http://subdomain.mydomain.com%{REQUEST_URI} [L,P]
于 2013-10-02T20:08:07.683 回答