Apachenetworking服务器:如何将所有请求redirect到www.domain.com domain.com

像这样的东西适用于索引页面:

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

所以这样的url:

 http://example.com gets forwarded to http://www.example.com 

但是这不起作用:

 http://example.com/robots.txt 

我也尝试了下面的.htaccess中的相同的结果:

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

请帮我解决这个问题。

完整configuration:

 LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so <VirtualHost *:80> ServerName example.com Redirect permanent / http://www.example.com </VirtualHost> <VirtualHost *:80> ServerName http://www.example.com ProxyPass / balancer://example/ stickysession=JSESSIONID|jsessionid ProxyPassReverse / balancer://example/ stickysession=JSESSIONID|jsessionid ProxyPreserveHost On <Proxy balancer://example> BalancerMember http://host1.example.com:8080/ route=tomcat1 BalancerMember http://host2.example.com:8080/ route=tomcat2 </Proxy> </VirtualHost> 

robots.txt位于每个tomcat服务器上。

我总是使用否定模式,所以与虚拟主机相匹配但与规范地址不匹配的任何内容都将被redirect。

 RewriteCond %{HTTP_HOST} !^www.example.com [nocase] RewriteRule ^/(.*)$ http://www.example.com/$1 [redirect=permanent,nocase,last] 

这有一个无限的和未指定数量的ServerAlias指令(如* .example.net,* .example.org,* .example.asia等)的所有redirect到www.example.com正确)

我个人总是发现一个简单的301redirect已经足够用于这个目的了:

 <VirtualHost *:80> ServerName oakalleyit.com Redirect 301 / http://www.oakalleyit.com/ </VirtualHost> 

这很简单,易于阅读/记忆,并完成正确的工作。

这实际上是从我的生产Web服务器复制,所以我知道它的工作原理。

这里有关于Apacheredirect的文档: http : //httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect

我只是testing,并inputhttp://oakalleyit.com/user正确的redirect到http://www.oakalleyit.com/user

这一直为我工作:

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

我认为你可能错过了$的条件?

更多信息可以在这里find: http : //httpd.apache.org/docs/2.0/misc/rewriteguide.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Apache文档页面使用mod_rewriteredirect和重映射说:

规范主机名

说明:此规则的目标是强制使用特定主机名,而不是其他可能用于访问同一站点的主机名。 例如,如果您希望强制使用http://www.example.com而不是example.com,则可以使用以下配方的变体。

解:

解决这个问题的最好方法根本不涉及mod_rewrite,而是使用放置在虚拟主机中的Redirect指令作为非规范主机名。

 <VirtualHost *:80> ServerName undesired.example.com ServerAlias example.com notthis.example.com Redirect "/" "http://www.example.com/" </VirtualHost> <VirtualHost *:80> ServerName www.example.com </VirtualHost> 

您也可以使用<If>指令完成此操作:

 <If "%{HTTP_HOST} != 'www.example.com'"> Redirect "/" "http://www.example.com/" </If>