RewriteRules组合的无限循环

时间:2010-01-19 08:50:05

标签: apache codeigniter loops mod-rewrite infinite

所以我在我的家庭服务器(Ubuntu 9.1)上设置SVN,并希望能够立即查看对我的CodeIgniter应用程序所做的任何更改。

所以,我的工作副本位于/ home / myname / environments / development / appname。

我的Vhost可以在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 / environments / development / appname / trunk / public。

现在,这是一个CodeIgniter应用程序,我需要将所有请求从public /重定向到public / index.php,所以.htaccess文件在public /中如下:

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/

如何将请求重定向到正确的公共/目录(在本例中为/ home / myname / environments / development / appname / trunk / publc),然后将所有请求从public发送到public / index.php?

我知道这是一个冗长的问题 - 感谢您的帮助。 :)

3 个答案:

答案 0 :(得分:1)

你的RewriteRule是你真正想要的。

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

这会将“dirA / dirB / dirC /”变成“index.php / dirA / dirB / dirC”。在随后的HTTP请求中,这将满足条件,并且将再次应用规则。又一次又一次......

尝试:

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

答案 1 :(得分:0)

AS Phil提到你应该使用这里的重写规则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

您可以检查重写规则和一些错误。您也可以将级别更改为9.请注意此选项。它产生了很多信息。它有时候会有所帮助。

答案 2 :(得分:-1)

尝试使用一些不那么疯狂的东西,你不应该需要从public /重定向到public / index.php,因为Apache会为你做这件事。

CodeIgniter Wiki显示如何create the ultimate CodeIgniter .htaccess