2013-06-20 96 views
0

...除了WWW,它也是一个子域名,当然。htaccess - 只重定向非子域请求

这是我目前的htaccess规则添加了评论:

RewriteEngine On 

#redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#what does this do? 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/login/ 

#rewrite /a/1 to /index.php?action=a&urlId=1 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA] 

#rewrite /a to /index.php?action=a 
RewriteRule ^([^/]+)/?$ index.php?action=$1 [L,QSA] 

现在我的问题是,我添加了两个子域a.domain.com和b.domain.com点到同一目录中,并为此去通过相同的htaccess - 但它们用于直接静态文件访问。如何防止a.example.comb.example.com完全使用上述规则?

也许有人可以解释这是什么一样:

#what does this do? 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/login/ 

谢谢!

回答

1

的解决方案是添加检查主机domain.com执行重写规则

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ 

关于你的第二个问题,前一个条件,一个或一个以上的RewriteCond指令不是单独的指示,但与相关重写规则,它们是必须有效执行RewriteRule的条件。

你的情况:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/login/ 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA] 

仅当请求的URI不指向一个文件,并且不与/登录/开始重写规则执行。

+0

谢谢你的胺!我在RewriteEngine On下添加了你的第一行,它似乎工作!对于第二个问题:!-f是什么意思?我知道,“了解你的代码”也将是一个有效的答案;) –

+0

ahhh谢谢你刚才添加的解释...谢谢! –

+0

很高兴它的作品。 :) –