2

我是 Zend 框架的新手。

我正在运行 Apache 2.2,并将 httpd.conf 文件中的 DocumentRoot 设置为使用 Zend_Tool 创建的公共目录。

在公共目录中,我有一个 .htaccess 文件;

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

...和一个 index.php 文件;

<?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();

当我在浏览器中键入“http://localhost/”时,“application/views/scripts/index/”目录中的文件 index.phtml 呈现正常。

如果我尝试使用 url 中的控制器和操作名称访问其他视图,我会收到 404 错误,指出在服务器上找不到请求的 URL。

例如,我有控制器文件 TestController.php,它与 IndexController.php 位于同一目录中

/TestController.php/ _ _

<?php

class TestController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function testAction()
    {
        // action body
    }


}

我在“application/views/scripts/”中创建了一个包含名为 index.phtml 的文件的测试目录;

/views/scripts/test/index.phtml/ _ _

<br /><br />
<div id="view-content">
<p>View script for controller <b>Test</b> and script/action name <b>index</b></p>
</div>

当我尝试通过键入“http://localhost/test/”来呈现此文件时,我收到一个 404 错误,指出无法找到请求的 URL。我阅读过的所有 Zend Framework 文档和无数其他资源都表明该方法应该正确呈现。

我一定遗漏了一些东西,但是经过详尽的搜索后,无法找到其他有此特定问题的人。

问候罗恩

4

4 回答 4

1

try creating an indexAction in the test controller... or test.phtml in the directory

于 2012-09-11T04:29:54.083 回答
1

您能否检查第二个 url localhost/test 是否正在通过您的 index.php。您可以为此放置一个 die() 或一些调试语句。

于 2012-09-11T09:49:06.360 回答
0

嗯,尝试将其添加到您的 httpd.conf 文件中:

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot Link to yourSiteFolder exp. C:/AppServ/www/yourSite/public
ServerName youServerName exp. http://mysite.com or you ip http://xxx.xxx.xxx.xxx
 </VirtualHost>

<Directory "Link to yourSiteFolder exp. C:/AppServ/www/yourSite/public">
Options FollowSymLinks
AllowOverride All
</Directory>

找到这个:

#LoadModule rewrite_module modules/mod_rewrite.so

并删除'#'。

于 2012-09-11T17:19:02.220 回答
0

感谢您的回复。

以为我会为其他人发布我的解决方案..

这是我在目录标签内的 httpd.conf 文件中更新的部分;

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride All

并且我之前取消了上面提到的模块的注释

LoadModule rewrite_module modules/mod_rewrite.so

干杯

于 2012-09-13T03:07:10.010 回答