子域名重定向、URL 屏蔽

子域名重定向、URL 屏蔽

我的问题很简单,但我似乎找不到解决方案。

我有一个域名www.域名.com有子域名。

www.domain.com 的文档根目录是/home/domain/public_html

子域名(不包括 www)需要重定向到 example.com,即 abc.domain com 需要重定向到/home/example/public_html

另外,需要保留 url。即abc.domain.com需要显示在地址栏中。

我至今所做的事情 我在 httpd.conf 中维护了以下条目

  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^(.*)domain.com$
  RewriteRule ^.*$ http://%1example.com$0

但是,URL 变为 abc.example.com,并且 www.domain.com 也被重定向到 www.example.com。

请建议解决此问题的最佳方法。

虚拟主机配置,没有重写规则,

  <VirtualHost *:80>
      ServerName domain.com
      ServerAlias *.domain.com www.domain.com
      DocumentRoot /home/domain/public_html
      UseCanonicalName Off
      ## User abc # Needed for Cpanel::ApacheConf
      UserDir enabled abc
      <IfModule !mod_disable_suexec.c>
          <IfModule !mod_ruid2.c>
             SuexecUserGroup abc abc
          </IfModule>
      </IfModule>
      <IfModule mod_ruid2.c>
          RMode config
          RUidGid abc abc
      </IfModule>
      <IfModule itk.c>
          AssignUserID abc abc
      </IfModule>
  </VirtualHost>

答案1

这里不需要RewriteRule指令。您需要为子域名创建一个虚拟主机,然后将与主域名相同的文档根目录分配给该子域名。

RewriteRule当您需要将用户的浏览器重定向到新的 URL 时使用,并且新的 URL 始终显示在浏览器的 URL 字段中。

因此,您应该删除RewriteRule和相关指令,并使用这个虚拟主机配置:

<VirtualHost *:80>
  ServerName domain.com
  ServerAlias www.domain.com
  DocumentRoot /home/domain/public_html
  UseCanonicalName Off
  ## User abc # Needed for Cpanel::ApacheConf
  UserDir enabled abc
  <IfModule !mod_disable_suexec.c>
      <IfModule !mod_ruid2.c>
         SuexecUserGroup abc abc
      </IfModule>
  </IfModule>
  <IfModule mod_ruid2.c>
      RMode config
      RUidGid abc abc
  </IfModule>
  <IfModule itk.c>
      AssignUserID abc abc
  </IfModule>
</VirtualHost>

<VirtualHost *:80>
  ServerName other.domain.com
  ServerAlias *.domain.com
  DocumentRoot /home/example/public_html
  UseCanonicalName Off
  ## User abc # Needed for Cpanel::ApacheConf
  UserDir enabled abc
  <IfModule !mod_disable_suexec.c>
      <IfModule !mod_ruid2.c>
         SuexecUserGroup abc abc
      </IfModule>
  </IfModule>
  <IfModule mod_ruid2.c>
      RMode config
      RUidGid abc abc
  </IfModule>
  <IfModule itk.c>
      AssignUserID abc abc
  </IfModule>
</VirtualHost>

对于第二个虚拟主机,您可以使用任何不存在的子域名作为ServerName指令。但是,您需要一个非通配符ServerName指令,因为通配符只允许在ServerAlias指令中使用。

这里的技巧是第一个VirtualHost块用于domain.comwww.domain.com,因为 Apache 使用第一个匹配的VirtualHost块。文档根目录设置为/home/domain/public_html

第二个VirtualHost块用于所有其他匹配的域,并且文档根目录位于此处/home/example/public_html

答案2

这对我有用:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^w]*).domain.com$
RewriteRule ^.*$ http://%1.example.com$0

正则表达式现在将匹配除 w 字符串之外的任何主机名。(如果您需要 w.domain.com、ww.domain.com、wwww.domain.com 等来工作,则需要对此进行修改。)

相关内容