2013-06-20 154 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

很高興它的作品。 :) –