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

Несколько доменов (включая www- «поддомен») на apache?

немного повозившись, я решил спросить здесь:

У меня есть 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 в основном:

  1. Убедитесь, что URL-адрес начинается с www.
  2. Если нет, перенаправьте на http://www.domain.de/[whatever]

Если вы перейдете на «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>