Ответ 1
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.domain1.com
ServerAlias www.domain2.com
</VirtualHost>
У меня есть выделенный сервер (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, который они вводили для независимой презентации, но делал контент односторонним, не обновляя сразу два сайта.
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.domain1.com
ServerAlias www.domain2.com
</VirtualHost>
Вам нужна Virtual Host - два виртуальных хоста, указывающих на одно местоположение.
Конечно, код страницы должен быть достаточно гибким, чтобы поддерживать это - например, внутренние URL-адреса, если абсолютные (с частью http://
или https://
) также должны отражать изменения. Но вы, вероятно, уже знаете это.
Я сделал что-то очень похожее на пару небольших сайтов, управляемых одной и той же компанией (одна компания, два свойства, каждая со своим сайтом). Оба находятся на общем хостинге, но вы должны иметь возможность делать то же самое с 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>
Просто отредактируйте DNS на domain2.com
, чтобы указать на те же записи сервера имен для domain1.com
. Пока файлы, используемые на вашем сайте, не жестко закодированы для определенного домена, он автоматически будет использовать маскирование.
Когда вы говорите "обычная учетная запись веб-хостинга", я принимаю общий хостинг. Если это так, вместо использования функции Виртуального хоста, для которой у вас может даже не быть доступа, вы должны попробовать метод .htaccess:
У нас уже есть вопрос: .htaccess перенаправить один домен на другой, включающий определенную строку запроса
Надеюсь, это помогло.: -)
Если у сервера 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]