0

所以我在我的家庭服务器(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,因此 public/ 中的 .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/

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

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

4

3 回答 3

1

您的 RewriteRule 与您实际想要的相反。

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

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

尝试:

RewriteRule ^(.*)\/?$ $1/index.php [L]
于 2010-01-19T19:48:44.437 回答
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。请注意此选项。它产生了大量的信息。它有时会很有帮助。

于 2010-01-19T19:43:57.117 回答
-1

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

CodeIgniter Wiki 展示了如何创建终极 CodeIgniter .htaccess

于 2010-01-19T10:52:24.000 回答