Использование 2 доменов на одном веб-сайте

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

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

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

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

Ответ 1

<VirtualHost *:80>
  DocumentRoot /www/example1
  ServerName www.domain1.com
  ServerAlias www.domain2.com
</VirtualHost>

Ответ 2

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

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

Ответ 3

Я сделал что-то очень похожее на пару небольших сайтов, управляемых одной и той же компанией (одна компания, два свойства, каждая со своим сайтом). Оба находятся на общем хостинге, но вы должны иметь возможность делать то же самое с 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>

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Пример простого P/proxy.

Вы можете поместить .htaccess внутри корня документа домена2, а затем проксировать все запросы до домена1:

RwriteRule ^(.*)$ http://domain1$1 [P]