Zend Framework控制器加载失败之谜

时间:2010-01-16 18:14:16

标签: php zend-framework

我有一个.htaccess文件,如下所示:

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

如果我浏览我的网站,我正在测试,比如http://www.example.com/,索引页面会正确加载。

这是一个Zend Framework应用程序,因此它应该将内容路由到我的控制器,因为如果我转到http://www.example.com/index/indexhttp://www.example.com/index,指定控制器+操作,并且只是控制器,分别。

如果我执行类似http://www.example.com/index/test的操作,它也可以工作,我在索引控制器上定义了另一个名为test的操作。

但是如果我创建一个TestController.php文件,并尝试转到http://example.com/test/,Apache就会返回:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL /path/to/website/root/public/index.php was not found on this server.</p> 
<hr> 
<address>Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch Phusion_Passenger/2.0.3 mod_perl/2.0.3 Perl/v5.8.8 Server at www.example.com Port 80</address> 
</body></html> 

有谁能看到我搞砸了什么?

Billy3

编辑:我网站的配置类似于:

Alias /MySiteRoot/ "/usr/local/vsites/something/www/"
<Directory /usr/local/vsites/something/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

3 个答案:

答案 0 :(得分:1)

当mod_rewrite不工作时,我经常遇到这个问题。

如果您已启用mod_rewrite,请在/etc/apache2/sites-available/yoursite.com配置文件中检查AllowOverride是否设置为All。

答案 1 :(得分:0)

因此,如果我正确读取此信息,路由工作正常,但只在您在网址中指定控制器时才能正常工作。

所以你有以下内容:

class TestController extends Zend_Controller_Action
{

    //do you have an index action???
    public function indexAction()
    {

    }

}

答案 2 :(得分:0)

事实证明,如果您的站点不是域的根,则必须添加RewriteBase指令才能正确格式化。我仍然不知道为什么它事先报告了正确的文件,但它现在似乎有效。

谢谢,祝你有愉快的一天:)