2011-05-24 116 views
0

我正在寻找一种方法来将非www域重写为www域,同时不重定向直接IP请求。重定向非www域但不是IP

我在同一台服务器上有多个站点 - 即:一个默认(虚拟)主机和一个带有ServerName和多个ServerAlias'es的VirtualHost,它们完美地工作。我更喜欢域名以“www”开头。所以我砍死下面的代码放在一起,伟大的工程:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

它不处理HTTPS,但最大的问题是,请求到服务器的IP也从如重写。 “123.45.67.8”到“www.123.45.67.8”。我可以添加下面的行来解决这个问题:

RewriteCond %{HTTP_HOST} !^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ 

...但它是否有效?那IPv6呢?

不是mod_rewrite-wiz,我一直在想弄清楚别人怎么解决这个问题,但是没有运气。

回答

1

那是因为你的条件是只检查是否以www开始,试试这个,而不是(我离开了可选的HTTPS代码):

RewriteCond %{HTTP_HOST} ^(yourdomain|thisdomain|thatdomain)\.com 
#RewriteCond %{HTTPS} =on 
#RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R,L] 
RewriteRule .* http://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]