Apache2的vhostconfiguration问题

我想要apache做的是匹配example.com的每个请求,并redirect到www.example.com。 浏览器发送的任何其他主机都不应该返回404。

这是我的两个鬼:

example.com:

<VirtualHost *> ServerAdmin [email protected] ServerName www.example.com ServerAlias *.example.com DocumentRoot /var/www/example.com/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> RewriteEngine on RewriteCond %{HTTP_HOST} ^.*example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L] ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> 

000默认:

 <VirtualHost *> Redirect 404 / </VirtualHost> 

实际上发生的事情是,“www.example.com”是应该的,“testing”主机标题应该是404d,而“example.com”是404d,它应该是“T。

这就像apache匹配“www”到ServerName指令,但ServerAlias被忽略,而“sub”的子域匹配默认的虚拟主机。

 <VirtualHost *> ServerName example.com Redirect permanent / http://www.example.com/ </VirtualHost> 

将处理固定您的www /非www的东西。

然后,对于任何其他主机,只需将您的默认虚拟主机指向一些空的documentroot(或一些处理您所需的任何自定义404的脚本。

您需要将example.com添加到您的ServerAlias行:

 ServerAlias example.com *.example.com 

然后重写你的RewriteCond为:

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

…因为我不认为你需要第一个%{HTTP_HOST}行。

运用

 ServerName example.com ServerAlias *.example.com 

我得到从非www到www的redirect,但example.com单独返回404