2011-07-23 84 views
2

所以我有mydomain.tld,www.mydomain.tldres.mydomain.tld都指向相同的目錄:/var/www/mydomain。在那個目錄中,有我的codeigniter應用程序。mod_rewrite:子域到控制器

所以我試圖做的是轉發所有通過res.mydomain.tld作出的請求到一個特定的控制器resources

我有什麼:

RewriteCond %{HTTP_HOST} ^res\.mydomain\.tld$ 
RewriteRule ^(.*)$ /index.php?/resources/$1 [L] 

這將產生一個服務器錯誤,我重寫日誌不提供有關爲什麼任何線索;它只是顯示了一些非常古怪的邏輯被應用到請求字符串。

任何想法,爲什麼這不工作?

+0

什麼服務器錯誤的一種,與Apache的錯誤頁面500內部服務器錯誤? – hakre

+2

如果您沒有從重寫日誌中獲得有用信息,錯誤日誌會說明什麼? –

+0

hakre:是的。 Michael:只是請求超過了10個內部重定向的限制。 – thwd

回答

4

開始留下你的.htaccess是前上方以下。

在你routes.php文件

if($_SERVER["SERVER_NAME"]=="res.mydomain.tld"){ 
    $route['default_controller'] = "resources"; 
}else{ 
    //$route['default_controller'] = Your default controller... 
} 
2

確保index.php不匹配,並進入一個重寫循環:

RewriteCond %{REQUEST_URI} !^index\.php 
RewriteCond %{HTTP_HOST} ^res\.mydomain\.tld$ 
RewriteRule ^(.*)$ /index.php?/resources/$1 [L] 
+0

但不應該[L]標誌避免進一步重寫相同的請求? – thwd

+0

@Tom,不,因爲它不是另一個規則正在處理。在重定向到index.php之後,相同的規則再次匹配並且重定向再次發生。 (並且一次又一次) –

+0

[L]阻止當前規則下面的規則被應用。但是在完成並且url被重寫之後,它會重新開始整個過程​​以獲取新的url。 – Gerben

3

您創建了一個無限循環。它不斷重寫,因爲規則總是匹配,並且再次匹配。只需添加一個規則,像您的規則

RewriteRule ^index.php - [L] 

這將防止任何剩餘的規則,它下面的執行如果(已經重寫)網址的index.php