Model view controller Zend框架默认MVC实现

Model view controller Zend框架默认MVC实现,model-view-controller,zend-framework,Model View Controller,Zend Framework,我已经使用Zend框架一段时间了。在阅读了大量的文档之后,我想知道为什么所有的示例都没有提到它 如果我是对的,MVC设计模式倾向于使用单个入口点与应用程序交互。使用Zend,它将在公用文件夹中创建index.php文件 我尝试使用Zend提供的默认(v1.09).htaccess使用这种方式: RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_

我已经使用Zend框架一段时间了。在阅读了大量的文档之后,我想知道为什么所有的示例都没有提到它

如果我是对的,MVC设计模式倾向于使用单个入口点与应用程序交互。使用Zend,它将在公用文件夹中创建index.php文件

我尝试使用Zend提供的默认(v1.09).htaccess使用这种方式:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
以及默认的index.php文件:

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);


$application->bootstrap()
            ->run();
但到目前为止,我无法使用单一入口点,我必须复制索引文件并为其提供相关控制器的名称。通过这种方式,我没有得到500服务器错误,而是能够正常加载页面

所以,我的问题是:在让我的应用程序正常工作的过程中,我犯了什么错误?这是正常的做事方式吗

谢谢

编辑@13h55

我已经重新配置了我的服务器,以便通过虚拟主机而不是别名访问zend安装,这似乎就是错误所在

我用了一个别名,看起来像:

Alias /elul/ "c:\wamp\www\elul\trunk\elul\public/" 

<Directory "c:\wamp\www\elul\trunk\elul\public/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order allow,deny
    Allow from all
</Directory>
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "C:\wamp\www\examen_fle\trunk\examen_fle\public"
    ServerName examen.elul.local
    ErrorLog "logs/your_own-error.log"
    CustomLog "logs/your_own-access.log" common
    <directory "C:\wamp\www\examen_fle\trunk\examen_fle\public">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </directory>
</VirtualHost>

如果您更喜欢使用别名而不是虚拟主机,则可能需要使用
RewriteBase
,或者可以将基本url预先发送到frontcontroller:

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

也应该工作。。。不过我还是用这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /project_name/index.php

这是一个更简单的规则,但我不确定它是否真的会影响性能或涵盖所有可能性。

如果您更喜欢使用别名而不是虚拟主机,您可能需要使用
RewriteBase
,或者您可以将基本url预先发送到frontcontroller:

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

也应该工作。。。不过我还是用这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /project_name/index.php

这是一个更简单的规则,但我不确定它是否真的会影响性能或涵盖所有可能性。

这可能很简单,因为您的http服务器没有解析.htaccess文件。
AllowOverride
Apache设置是否正确?您的
mod\u rewrite
设置是否正确
a2enmod rewrite
以启用它+apache重新启动。到目前为止,mod_rewrite正在工作(如果禁用它,我会收到一个找不到的错误),如果有一个别名指向我的公用文件夹。我将在虚拟主机上尝试此操作,以查看它是否有任何更改。这可能很简单,因为您的http服务器没有解析.htaccess文件。
AllowOverride
Apache设置是否正确?您的
mod\u rewrite
设置是否正确
a2enmod rewrite
以启用它+apache重新启动。到目前为止,mod_rewrite正在工作(如果禁用它,我会收到一个找不到的错误),如果有一个别名指向我的公用文件夹。我将在虚拟主机上尝试此操作,看看是否有任何更改。谢谢,因为我启用了虚拟主机,所以我将继续使用我的新配置,但如果我必须配置一个新项目,我肯定会尝试一下你的解决方案。我只需要在一个新服务器上安装我的web应用程序,该服务器使用alias将URL重定向到它们的最终位置,你的解决方案工作得很好(我使用了第一个)谢谢,因为我启用了虚拟主机,所以我将坚持使用我的新配置,但如果我必须配置一个新项目,我肯定会尝试一下你的解决方案。我只需要在一个新服务器上安装我的web应用程序,该服务器使用alias将URL重定向到它们的最终位置,而你的解决方案工作得很好(我使用了第一个)