所以我在我的家庭服务器(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?
我知道这是一个冗长的问题 - 感谢您的帮助。 :)
答案 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。