Назад | Перейти на главную страницу

Перенаправление поддоменов, маскирование URL

Моя проблема проста, но я не могу найти решение.

У меня есть домен www.domain.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>

Это сработало для меня:

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

Регулярное выражение теперь будет соответствовать любому имени хоста, кроме строки w. (Это нужно будет изменить, если вам когда-нибудь понадобится w.domain.com, ww.domain.com, wwww.domain.com и т. Д. Для работы.)

Вам не нужен 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.com и www.domain.com, поскольку Apache использует первое соответствие VirtualHost блок. Там корень документа установлен на /home/domain/public_html.

Второй VirtualHost блок используется для всех других совпадающих доменов, и там корень документа /home/example/public_html.