2011-10-18 98 views
3

這就是我要的僞代碼實現的目標:如何在.htaccess文件中編寫if - elseif - elseif條件塊?

if server.host equals 'productionsite.com' then 
    RewriteBase/
else if server.host equals 'stagingsite.com' then 
    RewriteBase /staging/mysite 
else if server.host equals 'localhost' or server.host equals '127.0.0.1' then 
    Rewrite /dev/mysite 

然而,這就是我其實到目前爲止這似乎並不像我期待的工作:

RewriteCond %{HTTP_HOST} =productionsite.com 
RewriteBase/

RewriteCond %{HTTP_HOST} =stagingsite.com 
RewriteBase /staging/mysite 

RewriteCond %{HTTP_HOST} =localhost 
RewriteBase /dev/mysite 

我明白任何幫助我可以提前獲得。

回答

1

不是每本身的答案(一開始是註釋),但可能你有點幫助:

你的方法是行不通的,因爲RewriteBase不受的RewriteCond指令。 RewriteCond只能跟在另一個RewriteCond或RewriteRule之後。 RewriteBase是一個完全不同的野獸:我不認爲有條件的RewriteBase是可能的;我有模糊的感覺,它在啓動時處理,所以不能動態改變(但我可能對此非常錯誤)。谷歌有一些「有條件的重寫庫」,您可以查看這些內容,但看起來很不利。

玩弄IfDefine達到類似的效果將是值得一試。

或者,你可以嘗試使用的RewriteRules和環境變量這樣做:

RewriteBase/

RewriteCond %{HTTP_HOST} =stagingsite.com 
RewriteRule^- [E=FRB:/staging/mysite] 

RewriteCond %{HTTP_HOST} =localhost 
RewriteRule^- [E=FRB:/dev/mysite] 

然後預先考慮與FRB環境變量中的每個重寫路徑,像

RewriteRule ^home$ %{ENV:FRB}/index.php 

但這僅僅是一個未經考驗理論。