我想要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