Использование 2 доменов на одном сайте - PullRequest
11 голосов
/ 31 мая 2011

У меня есть выделенный сервер (apache, php, mysql)

Существует основной домен (назовем его www.domain1.com), который фактически содержит все файлы, как любая другая обычная учетная запись веб-хостинга. Другой домен (назовите его domain2.com) необходимо перенаправить на него, но с маскировкой.

Таким образом, domain2.com/filename.php, domain2.com/filename.php/432/r23-gjfdla-fdjslaf/ все должны показывать соответствующее содержимое контента domain1.com, НО браузер должен по-прежнему показывать domain2.com вместо domain1.com, он также должен быть обнаружен $ _SERVER ['HTTP_HOST'], чтобы мой сервер знал, какой домен использовался для связи с сайтом.

Это потому, что у меня есть 2 клиента, которые находятся в партнерстве, поэтому они хотели бы, чтобы каждый посетитель оставил любой URL-адрес, введенный им для независимой презентации, но сделал контент односторонним, не обновляя сразу два сайта.

Ответы [ 6 ]

29 голосов
/ 31 мая 2011
<VirtualHost *:80>
  DocumentRoot /www/example1
  ServerName www.domain1.com
  ServerAlias www.domain2.com
</VirtualHost>
8 голосов
/ 31 мая 2011

Вам нужна функция Виртуальный хост - два виртуальных хоста, указывающие на одно местоположение.

Конечно, код страницы должен быть достаточно гибким, чтобы поддерживать это - например, внутренние URL,если абсолютный (с http:// или https:// часть), также должны отражать изменения.Но вы, вероятно, уже знаете это.

6 голосов
/ 24 июня 2011

Я сделал нечто очень похожее для пары небольших сайтов, принадлежащих одной и той же компании (одна компания, два объекта, каждый со своим сайтом). Оба находятся на виртуальном хостинге, но вы должны быть в состоянии сделать то же самое с VirtualHosts - просто определите два VirtualHosts, каждый с отдельным именем домена, но каждый указывает на один и тот же корень документа в файловой системе:

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /srv/www/public_html
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot /srv/www/public_html
</VirtualHost>

У меня есть index.php в каталоге public_html. Это проверяет $_SERVER['HTTP_HOST'], чтобы определить используемое доменное имя. Затем он устанавливает несколько констант с соответствующими местоположениями каталогов и флагом сайта, который используется при доступе к базе данных.

У меня есть три каталога для статического содержимого. Один из них является общим контентом, который используется для обоих доменов, а два других являются специфичными для сайта и включают такие вещи, как логотипы.

Остальные сценарии PHP хранятся вне корня документа в отдельном каталоге сценариев. При необходимости сценарии могут использовать константы, определенные в index.php, для таких вещей, как абсолютные URL-адреса или другая информация, специфичная для сайта.

/srv/www/
|
|--public_html
|  |
|  |--site1
|  |  |
|  |  |--css
|  |  |--images
|  |
|  |--site2
|  |  |
|  |  |--css
|  |  |--images
|  |
|  |--shared
|     |
|     |--css
|     |--images
|
|--scripts

Если вам нужны два отдельных корня документа, просто создайте два отдельных файла index.php, по одному для каждого. Затем они оба могут вызывать одну и ту же общую кодовую базу (в моем случае это /srv/www/scripts/). Примерно так:

/srv/www/
|
|--site1
|  |
|  |--public_html
|     |
|     |--css
|     |--images
|   
|--site2
|  |
|  |--public_html
|     |
|     |--css
|     |--images
|
|--scripts

А потом:

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /srv/www/site1/public_html
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    DocumentRoot /srv/www/site2/public_html
</VirtualHost>
5 голосов
/ 24 июня 2011

Просто отредактируйте DNS на domain2.com, чтобы он указывал на те же записи сервера имен для domain1.com. Пока файлы, используемые на вашем сайте, не жестко запрограммированы для конкретного домена, он будет автоматически использовать маскирование.

4 голосов
/ 24 июня 2011

Если на вашем сервере Apache есть mod_proxy, вы можете использовать его для передачи запросов на другие домены сервером, а не клиентом.

Затем вы можете использовать его в течение mod_rewrite RewriteRule с, используя флаг P.

Преимущество заключается в том, что вы можете контролировать это за .htaccess:

RewriteRule (.*)\.(jpg|gif|png) http://images.example.com$1.$2 [P]

Простой P / proxy пример флага.

Вы можете поместить .htaccess в корень документа domain2 и затем проксировать все запросы на domain1 :

RwriteRule ^(.*)$ http://domain1$1 [P]
4 голосов
/ 22 июня 2011

Когда вы говорите «обычная учетная запись веб-хостинга», я предполагаю, что это общий хостинг. Если это так, вместо использования функции виртуального хоста, к которой у вас может даже не быть доступа, вы должны попробовать метод .htaccess:

Уже есть вопрос: .htaccess перенаправляет один домен в другой, включая конкретную строку запроса

Надеюсь, это помогло. : -)

...