从几个网址(包括www和非www)重定向到原始网址

时间:2012-04-28 07:57:05

标签: apache mod-rewrite redirect

如何缩短此表达式?我想要而不是使用2行只是检查任何域名是什么不同于mysite.com,例如有或没有www和重定向的mysite.org或www.mysite.org。

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^mysite\.org$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mysite\.org$ [OR]
RewriteCond %{HTTP_HOST} ^mysite\.net$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mysite\.net$

RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]

使用[OR]或做这样的

也更快
  RewriteCond %{HTTP_HOST} ^www\.mysite\.com$
    RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^mysite\.org$
    RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^www\.mysite\.org$
    RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^mysite\.net$
    RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]

P.S。即使我不使用[NC],为什么这可以作为案例说明?

1 个答案:

答案 0 :(得分:0)

您可能想查看canonical hostnames上的Apache文档,您的规则可以表示为否定

RewriteEngine On
RewriteCond %{HTTP_HOST}    !^mysite\.com$ [NC]
RewriteCond %{HTTP_HOST}    !^$
RewriteRule ^(.*)$  http://mysite.com/$1 [L,R=301]

对于没有[NC]的规则匹配,它可能取决于浏览器发送给服务器的内容。