У меня есть VPS, который я настроил для размещения нескольких веб-сайтов с хостингом на основе имени. Все хорошо, если только использовать example.com, и www.example.com. Он также работает с example.net, но когда я пытаюсь example.net, он возвращается к моему дефолт конфигурация сайта, которая просто показывает мою (пустую) страницу index.html по умолчанию.
Вот файл по умолчанию:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Вот конфигурация для example.com сайт:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /srv/www/example.com/public_html/
ErrorLog /srv/www/example.com/logs/error.log
CustomLog /srv/www/example.com/logs/access.log combined
<Directory /srv/www/example.com/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
А вот конфиг для example.net сайт:
<VirtualHost *:80>
ServerAdmin admin@example.net
ServerName example.net
ServerAlias www.example.net
DocumentRoot /srv/www/example.net/public_html/
ErrorLog /srv/www/example.net/logs/error.log
CustomLog /srv/www/example.net/logs/access.log combined
<Directory /srv/www/example.net/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
В чем может быть проблема?
Я считаю, что что-то не так со свойством ServerAlias.
Может быть, это из-за того, как построен сайт? Так как example.com это Joomla сайт и example.net это сайт Zend Framework. На всякий случай тоже вставлю файлы .htaccess для example.net, поскольку example.com он отключен: example.net:
SetEnv APPLICATION_ENV development
RewriteRule ^(browse|config).* - [L]
ErrorDocument 500 /error-docs/500.shtml
SetEnv CACHE_OFFSET 2678400
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Fri, 25 Sep 2037 19:30:32 GMT"
Header unset ETag
FileETag None
</FilesMatch>
RewriteEngine On
RewriteRule ^(adm|statistics) - [L]
RewriteRule ^/public/(.*)$ http://example.net/$1 [R]
RewriteRule ^(.*)$ public/$1 [L]
Любая помощь будет принята с благодарностью!
редактировать Так что мой вопрос АБСОЛЮТНО ясно: проблема в том, что один сайт работает с обоими www приставка так же, как и без нее, а вторая нет. Хотелось бы узнать, как включить второй сайт для работы с www префикс.
Убедитесь, что порядок приоритета в директивах конфигурации соответствует тому, как Apache должен обрабатывать запрос - т.е. вам не повезет, если ваши директивы загрузятся следующим образом:
Не имеет значения, объявлены ли они в одном файле или в нескольких файлах - пока "universal.lv" является последним, он не будет достигнут, потому что ему будет предшествовать виртуальный хост по умолчанию / catch-all.
Я обычно называю свою конфигурацию по умолчанию / catch-all "z-default.conf" (или, если у вас есть домен, который начинается с "z", "zz" ... и т. Д.) По этой причине, чтобы убедиться, что это обрабатывается, только если нет других совпадений vhost.
Попробуйте переименовать соответственно.
Обновлено: Чтобы не путать ж / д _default_
Директива VirtualHost
С помощью подстановочный DNS чтобы направлять все запросы на example.com на IP-адрес сервера (улавливает поддомены с неверным ключом), Apache анализирует следующие файлы конфигурации:
VirtualHost _default_:80
/ ServerName <hostname>
- перехватить запросы к IP-адресу сервера (может перенаправить на основной домен или просто заблокировать по умолчанию Directory
указано в conf.d/security
)VirtualHost *:80
/ ServerName www.example.com
VirtualHost *:80
/ ServerName www.example2.com
VirtualHost *:80
/ ServerName example.com
/ ServerAlias *.example.com
- перенаправляет на канонический домен wwwVirtualHost *:80
/ ServerName example2.com
/ ServerAlias *.example2.com
- перенаправляет на канонический домен wwwКак указано в документации, Apache выбирает первый подходящий VirtualHost (т.е. _default_:80
), но такое поведение нежелательно, если вы используете подстановочный знак в ServerAlias
директива.
Я рекомендую вам прочитать Документация Apache по виртуальным хостам первый.
Прекрасный пример приведен на http://httpd.apache.org/docs/2.2/vhosts/name-based.html:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
Обратите внимание ИмяVirtualHost часть. Ваш журнал ошибок (/var/log/apache2/error.log) должен был предупреждать вас о возможной ошибке.
Примечание: после изменения файла конфигурации необходимо перезапустить Apache.
вам нужно включить NameVirtualHost в httpd.conf - тогда вы можете определить несколько виртуальных хостов на одном и том же порте ip :.