对于索引页来说,类似这样的工作:
<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]
请帮我解决这个问题。
完整配置:
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 服务器上。
答案1
我总是使用否定模式,所以任何事物与虚拟主机匹配,但与规范地址不匹配,将被重定向。
RewriteCond %{HTTP_HOST} !^www.example.com [nocase]
RewriteRule ^/(.*)$ http://www.example.com/$1 [redirect=permanent,nocase,last]
这样做的好处是,可以使用无限数量的ServerAlias
指令(例如 *.example.net、*.example.org、*.example.asia 等)将所有指令正确重定向到 www.example.com)
答案2
我个人一直认为一个简单的 301 重定向就足以达到此目的:
<VirtualHost *:80>
ServerName oakalleyit.com
Redirect 301 / http://www.oakalleyit.com/
</VirtualHost>
它简单、易读/易记,并且能正确完成工作。
这实际上是从我的生产网络服务器复制而来的,所以我知道它可以工作。
这里有关于 Apache 重定向的文档:http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect
我刚刚测试了一下,输入http://oakalleyit.com/用户正确重定向至http://www.oakalleyit.com/用户
答案3
这对我来说一直很有效:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.co\.uk$ [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [R=301,L]
我认为您可能遗漏了条件中的 $?
更多信息可以在这里找到: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html http://httpd.apache.org/docs/current/mod/mod_rewrite.html
答案4
Apache 文档页面使用 mod_rewrite 进行重定向和重新映射说:
规范主机名
描述:此规则的目的是强制使用特定主机名,而不是可用于访问同一站点的其他主机名。例如,如果您希望强制使用www.example.com代替例如.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>