Apache сопоставляет один субдомен с папкой

В моем /var/www у меня есть несколько сайтов (goodsite, badsite, uglysite). Прямо сейчас к ним обращаются mydomain.com/goodsite и т.д..

Я хочу, чтобы один сайт, uglysite, был доступен uglysite.mydomain.com, а остальные остались такими, какие они есть.

Я пробовал всевозможные способы возиться с .htaccess (в /var/www). Примечание. У меня включена мод-перезапись и включен мод vhost-alias.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^uglysite\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/uglysite/
RewriteRule ^(.*)$ /uglysite/$1 [L]

В итоге и mydomain.com, и uglysite.mydomain.com всегда сопоставляются с одним и тем же объектом (т. е. с индексом /var/www). Я попытался добавить новый виртуальный хост и был удивлен, обнаружив, что uglysite.mydomain.com отображается правильно, но затем mydomain.com также напрямую отображается на uglysite.

<Virtualhost uglysite.mydomain.com:80>
       ServerName uglysite.mydomain.com
       ServerAdmin www@localhost
       DocumentRoot "/var/www/"
       AccessFileName .htaccess
       <Directory "/var/www/uglysite">
               Order allow,deny
               Allow from All
               AllowOverride All
       </Directory>
</VirtualHost>

Вышеупомянутое было добавлено в мой файл sites-enabled/000-default. Это заставило uglysite.mydomain.com работать правильно, но затем mydomain.com сопоставился с тем же самым!

Есть ли простой способ сделать то, что я собираюсь сделать?? Заранее спасибо.


person Bill VB    schedule 17.07.2012    source источник


Ответы (1)


Вы должны превратить uglysite во второй файл вместо изменения 000-default

Итак, сделайте копию файла 000-default, измените поддомен, как вы сделали там, и измените каталог на /path/to/site.

000-по умолчанию:

<Virtualhost *:80>
       ServerName mydomain.com
       ServerAdmin www@localhost
       ServerAlias mydomain.com
       DocumentRoot "/var/www/goodsite"
       AccessFileName .htaccess
       <Directory "/var/www/goodiste">
               Order allow,deny
               Allow from All
               AllowOverride All
       </Directory>
</VirtualHost>

уродливый сайт:

<Virtualhost *:80>
       ServerName uglysite.mydomain.com
       ServerAlias uglysite.mydomain.com
       ServerAdmin www@localhost
       DocumentRoot "/var/www/uglysite"
       AccessFileName .htaccess
       <Directory "/var/www/uglysite">
               Order allow,deny
               Allow from All
               AllowOverride All
       </Directory>
</VirtualHost>

Также обратите внимание, что в приведенных выше примерах я изменил DocumentRoot, чтобы указать на каталог, из которого вы хотите, чтобы файл обслуживался.

РЕДАКТИРОВАТЬ: виртуальные хосты установлены на *: 80, так как ваши сайты все равно указывают на ваш собственный IP-адрес

person arcyqwerty    schedule 17.07.2012
comment
Вы должны сделать этот файл в /etc/apache2/sites-available между прочим и сделать символическую ссылку (ln -s sites-available/uglysite sites-enabled/uglysite) на сайты с поддержкой - person arcyqwerty; 17.07.2012
comment
Нужно ли мне явно включать его где-нибудь? - person Bill VB; 17.07.2012
comment
Не забудьте добавить сайт в файл apache.conf и перезапустить apache (sudo service apache2 restart) после завершения настройки. - person arcyqwerty; 17.07.2012
comment
В зависимости от того, как у вас настроен сервер apache, вам может понадобиться или не понадобиться включать его в apache.conf. Проверьте, есть ли уже строка Include sites-enabled/ ближе к концу - person arcyqwerty; 17.07.2012
comment
К сожалению, теперь я столкнулся со своей первоначальной проблемой: теперь uglysite.mydomain.com работает идеально, как я и хотел, но теперь mydomain.com также отображается на uglysite.mydomain.com! - person Bill VB; 17.07.2012
comment
Убедились ли вы, что DocumentRoot указывает на соответствующий каталог в обоих файлах конфигурации виртуального хоста? Вы перезапустили апач? - person arcyqwerty; 17.07.2012
comment
DocumentRoot указывает на правильные папки. однако, если я возьму VirtualHost для *: 80 и изменю его на mydomain.com: 80 и сброшу apache - я получаю множество ошибок: перекрывается с VirtualHost ... первый имеет приоритет, возможно, вам нужна директива NameVirtualHost - person Bill VB; 17.07.2012
comment
Сколько файлов у вас сейчас? У вас есть что-то кроме двух файлов, которые я вложил в свой ответ? (это *:80 в вашем default-000 прямо сейчас?) - person arcyqwerty; 17.07.2012
comment
Возможно, вам придется использовать директиву ServerAlias - person arcyqwerty; 17.07.2012
comment
Да, у меня есть виртуальный хост на *:81... Как мне использовать ServerAlias ​​(спасибо за помощь) - person Bill VB; 17.07.2012
comment
Кроме того, если вам нужно отладить вашу конфигурацию/посмотреть, что делает apache, попробуйте запустить исполняемый файл apache /usr/local/apache2/bin/httpd -S или apache2ctl -S - person arcyqwerty; 17.07.2012