Apache子域名不能正常工作:使用真实域名

假设我有domain.com和sub.domain.com。

Domain.com的根应该是/ var / www / domain_com /sub.domain.com的根应该是/ var / www / domain_com / sub /

在/ etc / apache2的/网站启用/ 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> 

/ 000-缺省的/ etc / apache2的/启用的站点 –

 <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指令中configuration的内容相匹配。 基于名称的托pipe没有发生,所以第一个地址是获取所有请求。

通常情况下,你将在Apacheconfiguration文件的某个地方有这样的指令(ports.conf是常见的,当configuration被分割时):

 NameVirtualHost *:80 

这意味着你想要通过名称分配请求的虚拟主机应该与在那里设置的内容匹配:

 <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