因此我使用以下模式来处理我的 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,这不是我们想要的。
所以我的问题是:有没有更好的方案?或者我应该怎么做才能解决这个问题?
答案1
这取决于您希望看到什么行为。
如果您希望www.example.com
网站重定向到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]
如果您想以两个名称提供内容,那么您有几个选择。
如果您只拥有一组非常简单的域,那么请将构造的 docroot 更改为不关心
www
。VirtualDocumentRoot /var/www/%-2/docs
...指向 处的文档根目录
/var/www/example/docs
。如果您需要对子域名进行更多的创造性(例如,让
b.example.com
和www.b.example.com
指向他们自己的网站,而不是example.com
一个网站),符号链接可能是一个很好的方法。Options +FollowSymLinks
...并
/var/www/www.example.com
在 处创建一个指向 目录的 符号链接/var/www/example.com
。