像这样的东西适用于索引页面:
<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>