немного повозившись, я решил спросить здесь:
У меня есть vhost, и я хочу использовать 2 домена на этом сервере. Мой файл конфигурации apache выглядит примерно так:
NameVirtualHost *
<VirtualHost *>
ServerName www.domain1.de
DocumentRoot /var/www/folder1/
</VirtualHost>
<VirtualHost *>
ServerName www.domain2.de
DocumentRoot /var/www/folder2/
</VirtualHost>
На странице конфигурации для доменов моего vhost оба домена назначены на ip сервера.
Проблема теперь в следующем:
Есть ли у кого-нибудь идея, почему второй домен работает только с добавленным «www»?
domain1.de
работает потому что www.domain1.de
это первый VirtualHost
и используется по умолчанию. Вам нужно добавить ServerAlias domain2.de
к www.domain2.de
чтобы более короткая версия тоже работала (вы должны добавить ServerAlias
для www.domain1.de
слишком).
Если ты не хочешь www.domain1.de
будет использоваться по умолчанию добавить еще один VirtualHost
вначале обслуживаем простой HTML-файл.
Если вы хотите канонизировать свои домены (например, перенаправить все domain.de на www.domain.de), вы можете использовать что-то вроде mod_rewrite:
<VirtualHost *>
ServerName www.domain.de
ServerAlias domain.de
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www
RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
Три строки Rewrite в основном:
Если вы перейдете на «domain.de», он увидит, что он не начинается с «www», а перенаправит на «www.domain.de».
Если вы хотите применить это ко всем сайтам, которые вы размещаете, вы можете сделать следующее:
<VirtualHost *>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www
RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
<VirtualHost *>
ServerName www.domain1.de
DocumentRoot /wherever/1
</VirtualHost>
<VirtualHost *>
ServerName www.domain2.de
DocumentRoot /wherever/2
</VirtualHost>
Затем, когда кто-то пытается перейти на «domain1.de», он попадает на первый виртуальный хост, который автоматически перенаправляет их на «www. [Любой домен, который они ввели]».
Таким образом, если вы перейдете на «domain1.de», он увидит, что он не начинается с «www» и не перенаправит на «www.domain1.de». Для «domain2.de» он будет перенаправлен на «www.domain2.de». Каждый раз, когда вы добавляете новый сайт, вы автоматически получаете эту функцию, что может быть очень удобно, если вы добавляете / поддерживаете много сайтов.
www.domain.com и domain.com теоретически могут быть совершенно разными веб-сайтами. Вы должны указать оба. Вы можете использовать ServerAlias в ваших существующих блоках VirtualHost или сделать это для перенаправления 301 для SEO.
NameVirtualHost *
<VirtualHost *>
ServerName domain1.de
DocumentRoot /var/www/folder1/
</VirtualHost>
<VirtualHost *>
ServerName www.domain1.de
Redirect permanent / http://domain1.de/
</VirtualHost>
<VirtualHost *>
ServerName domain2.de
DocumentRoot /var/www/folder2/
</VirtualHost>
<VirtualHost *>
ServerName www.domain2.de
Redirect permanent / http://domain2.de/
</VirtualHost>
Используйте ServerAlias, чтобы связать более 1 домена с виртуальным хостом
NameVirtualHost *
<VirtualHost *>
ServerName www.domain1.de
ServerAlias domain1.de *.domain1.de
DocumentRoot /var/www/folder1/
</VirtualHost>
<VirtualHost *>
ServerName www.domain2.de
ServerAlias domain2.de *.domain2.de
DocumentRoot /var/www/folder2/
</VirtualHost>