2012-04-28 76 views
0

如何缩短这个表达式?我希望不要使用2行来检查任何与mysite.com不同的域名,例如mysite.org或www.mysite.org有或没有www和重定向。从几个url(www和非www)重定向到原来的

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] 

附:为什么这种情况下即使在我不使用[NC]的情况下也能起作用?

回答

0

您可能要在canonical hostnames检查Apache文档,你的规则可以表示为一个否定

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

而对于无[NC]匹配,则可能要看是什么浏览器向服务器发送规则。