.htaccess 在保留路径的同时使用新域屏蔽子域

.htaccess 在保留路径的同时使用新域屏蔽子域,.htaccess,redirect,dns,subdomain,shared-hosting,.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://s

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

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.如果有人访问我的旧域,请将其重定向到新的命名结构。i、 e.如果有人加载<代码>http://subdomain.mydomain.com/project2应将它们重定向到
http://shortdomain.com/project2

  • 当用户加载/重定向到
    http://shortdomain.com/project2
    这实际上应该加载
    http://subdomain.mydomain.com/project2
  • 因此,我不会手动迁移其他数据的项目、代码和GBs。我认为这可能只有通过智能重定向才能实现

    仅供参考: 1.我对这两个域都有完全的DNS控制权 2.我被招待在霍斯盖特酒店 3.我在第一个域上使用cloudflare,并希望继续使用它

    我认为这可能只有通过智能重定向才能实现

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

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

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

    2台Web服务器,服务器A(主机为subdomain.domain.com)和服务器B(主机为shortdomain.com)

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

    我对这两个域都有完全的DNS控制权

    通过完全控制,我假设您可以在
    shortdomain.com的Apache web服务器上启用
    mod_proxy
    ,一旦这样设置完成

    subdomain.mydomain.com
    上启用
    mod\u rewrite
    并将此规则放置在
    Apache config
    DOCUMENT\u ROOT/.htaccess
    中:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^subdomain\.mydomain\.com$ [NC]
    RewriteRule ^ http://shortdomain.com%{REQUEST_URI} [L,R=301]
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^shortdomain\.com$ [NC]
    RewriteRule ^ http://subdomain.mydomain.com%{REQUEST_URI} [L,P]
    
    shortdomain.com
    上启用
    mod_proxy
    mod_rewrite
    并将此规则放入
    Apache config
    DOCUMENT\u ROOT/.htaccess

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

    霍斯盖特也花了一些时间才弄明白这一点。这很有效。但并非完全如此,因为这些项目中的每一个都可能有自己的.htaccess,也可能没有。几乎把一切都搞砸了。仍在寻找稳定的解决方案。