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

Поддомен Apache не работает: используется реальный домен

Допустим, у меня есть domain.com и sub.domain.com.

Domain.comкорень должен быть / var / www / domain_com / и sub.domain.comкорень должен быть / var / www / domain_com / sub /.

/ etc / apache2 / sites-enabled / domain_com:

<VirtualHost sub.domain.com>
    ServerName sub.domain.com
    DocumentRoot "/var/www/domain_com/sub/"
    ErrorLog "/var/log/subdomain-error.log"
    CustomLog "/var/log/subdomain-access.log" combined
    <Directory "/var/www/domain_net/sub/">
        Order allow,deny
        Allow from all
        AllowOverride All
    </Directory>
</VirtualHost>


<VirtualHost domain.com>
    ServerName domain.com
    DocumentRoot "/var/www/domain_com/"
    ErrorLog "/var/log/apache2/domain-error.log"
    CustomLog "/var/log/apache2/domain-access.log" combined

    <Directory "/var/www/domain_net/">
        Order allow,deny
        Allow from all
        AllowOverride All
    </Directory>
</VirtualHost>

/ и т.д. / apache2 / сайты-включен / 000-по умолчанию

<VirtualHost _default_:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        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 debug

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

В настоящее время я получаю это, когда делаю с sub.domain.com/img.png:

[Sat Apr 09 01:14:41 2011] [error] [client xxx.xxx.xxx.xxx] File does not exist: /var/www/domain_com/img.png, referer: http://sub.domain.com/img10.png

Что я делаю не так? Почему sub.domain.com/img.png не обслуживается из / var / www / domain_com / sub /?

Чтобы виртуальный хостинг на основе имени работал правильно, вам необходимо сопоставить свой адрес привязки для <VirtualHost> блокирует то, что настроено в NameVirtualHost директива. Хостинга на основе имен не происходит, поэтому первый блок, который принимает адрес, - это получение всех запросов.

Обычно такая директива присутствует где-то в ваших файлах конфигурации Apache (при разделении конфигурации часто используется ports.conf):

NameVirtualHost *:80

Это означает, что вы хотите, чтобы vhosts, которые будут распределять запросы по имени, должны соответствовать тому, что там установлено:

<VirtualHost *:80>
    ServerName sub.domain.com
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName domain.com
    # (you might want this too):
    ServerAlias www.domain.com
    ...
</VirtualHost>

Кстати, а почему ваши <Directory> директивы, управляющие только domain_net и нет domain_com?

into /etc/apache2/sites-enabled/000-default add the line bellow
NameVirtualHost *

# execute the command 
httpd -S 
# look at how many virtual hosts do you have enabled do ur request 
# and check the logs