Apache:多个域名处理

所以我使用下面的模式来处理我的Apache的多个网站:

<VirtualHost 192.168.1.100:80> # get the server name from the Host: header UseCanonicalName Off VirtualDocumentRoot /var/www/%0/docs VirtualScriptAlias /var/www/%0/cgi-bin </VirtualHost> 

因此,如果客户访问www.example.com,实际上会指向/var/www/www.example.com/doc/,这很好。 但是,如果客户转到example.com呢? 它会指向/var/www/example.com/doc,这不是我们想要的。

所以我的问题是:有没有更好的scheme呢? 或者我应该怎么做才能解决这个问题?

这取决于你想看到什么样的行为。

如果您希望将www.example.com网站redirect到example.com ,反之亦然,则可以在RewriteRule设置中实施。 例如(这些进入你的<VirtualHost> ):

 # Send www.example.com to example.com RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^/(.*)$ http://example.com/$1 [R=301,L] # Send www.other.example.com to other.example.com RewriteCond %{HTTP_HOST} ^www\.other\.example\.com$ [NC] RewriteRule ^/(.*)$ http://other.example.com/$1 [R=301,L] 

www的名字击倒:

 RewriteCond ${HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^/(.*)$ http://%1/$1 [R=301,L] 

如果您想将内容提供给两个名称,那么您有几个选项。

  • 如果你只有一套非常简单的域名,那么修改构build的文档根目录不要关心www

     VirtualDocumentRoot /var/www/%-2/docs 

    …指向/var/www/example/docs处的docroot。

  • 如果你需要在子域名上增加一点创意(比如让b.example.comwww.b.example.com指向他们自己的站点,而不是example.com ),符号链接可能是一个好方法。

     Options +FollowSymLinks 

    …并在/var/www/www.example.com创build一个符号链接,指向/var/www/www.example.com上的目录。