出于各种原因,例如 cookie、SEO 以及为了简单起见,我想让 apache 自动将任何对http://www.foobar.com/anything的请求重定向到http://foobar.com/anything。我能想到的最好的方法是基于 mod_rewrite 的怪物,有没有一些简单的方法可以告诉它“将域 ABC 的所有请求重定向到 XYZ”?
PS:我发现这个有点相关的问题,但它是针对 IIS 的,并且与我想要的相反。而且它仍然很复杂。
出于各种原因,例如 cookie、SEO 以及为了简单起见,我想让 apache 自动将任何对http://www.foobar.com/anything的请求重定向到http://foobar.com/anything。我能想到的最好的方法是基于 mod_rewrite 的怪物,有没有一些简单的方法可以告诉它“将域 ABC 的所有请求重定向到 XYZ”?
PS:我发现这个有点相关的问题,但它是针对 IIS 的,并且与我想要的相反。而且它仍然很复杂。
这很简单:
<VirtualHost 10.0.0.1:80>
ServerName www.example.com
Redirect permanent / http://example.com/
</VirtualHost>
根据需要调整主机名和 IP :)
更简单,更容易地从站点复制到站点:
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
如果你像我们一样使用 mod_rewrite,那就很简单了;)
这是来自我的实时网站的 .htaccess 的一部分:
RewriteEngine on
# Catches www.infinite-labs.net and redirects to the
# same page on infinite-labs.net to normalize things.
RewriteCond %{HTTP_HOST} ^www\.infinite-labs\.net$
RewriteRule ^(.*)$ http://infinite-labs.net/$1 [R=301,L]
使用带有一些 mod_rewrite 规则的 .htaccess 文件:
RewriteEngine On
RewriteRule ^www.SERVERNAME(.*) http://SERVERNAME$1 [L,QSA]
我不确定那里的语法是否正确$1
,但有据可查。l 向浏览器发送一个location: header,QSA表示Query String Append。
既然您提到使用 mod_rewrite,我建议在您的 .htaccess 中使用一个简单的规则 - 对我来说似乎并不可怕:)
RewriteCond %{HTTP_HOST} ^www\.foobar\.com$ [NC]
RewriteRule ^(.*)$ http://foobar.com/$1 [L,R=301]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
这应该够了吧。