2010-01-19 36 views
0

因此,我在家用服務器(Ubuntu 9.1)上設置了SVN,並希望能夠立即查看對我的CodeIgniter應用程序所做的任何更改。RewriteRules組合上的無限循環

因此,我的工作副本居住在/ home/myname/environments/development/appname。

我的虛擬主機是在dev.appname.myname.ca訪問,並且配置是這樣的:

DocumentRoot /home/myname/environments/development/ 
ServerName dev.myname.ca 
ServerAlias dev.*.myname.ca 

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.* [NC] 
RewriteCond %{HTTP_HOST} ^dev.([^\.]+)\.myname\.ca 
RewriteCond /home/myname/environments/development/%1/trunk/ -d 
RewriteRule ^(.*) /%1/trunk/public/$1 

所以,要dev.appname.myname.ca將指向到/ home/MYNAME /環境/開發/應用程序的名字/主幹/公衆。

現在,這是一個笨的應用程序,我需要所有的請求從公共/重定向到公共/ index.php文件,所以在公共.htaccess文件/如下:

RewriteEngine On 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 

我有這個部分在.htaccess文件中,因爲在現場製作網站上,我將無法訪問服務器配置,因此我需要重寫它。

現在的問題是,我得到一個重定向循環,最終出現500錯誤。

從/var/log/apache2/error.log:

redirected from r->uri = /appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/ 

我怎樣才能將請求重定向到適當的公共/目錄(在這種情況下,/家庭/ MYNAME /環境/開發/應用程序的名字/ trunk/publc),然後將所有請求從public/public/index.php?

我知道這是一個冗長的問題 - 感謝您的幫助。 :)

回答

0

菲爾提到你應該使用重寫規則從這裏http://codeigniter.com/wiki/mod_rewrite/

對於一些調試,你可以添加以下行到你的httpd.conf或虛擬主機的conf。

<IfModule mod_rewrite.c> 
RewriteLog "/var/log/apache2/rewrite.log" 
RewriteLogLevel 3 
</IfModule> 

隨着

tail -f /var/log/apache2/rewrite.log 

您可以檢查重寫規則和一些錯誤。您也可以將Level更改爲9.請注意此選項。它產生了很多信息。有時候這很有幫助。

1

你的RewriteRule與你實際想要的相反。

RewriteRule ^(.*)$ index.php/$1 [L] 

這將打開 「迪拉/ DIRB/DIRC /」 到 「的index.php /迪拉/ DIRB/DIRC」。在隨後的HTTP請求中,這將滿足條件並且規則將再次應用。又一次,又一次......

嘗試:

RewriteRule ^(.*)\/?$ $1/index.php [L] 
+0

如果你這樣笨不會有任何效果。[L]標誌表示它將重定向到index.php,然後不再重定向。 – 2010-01-20 09:08:26