我的目录结构设置如下:
Application Root
|-application
| |--configs
| |--controllers
| | |--helpers
| |
| |--layouts
| | |--scripts
| |
| |--models
| |--views
| |--scripts
| |--index
| |--test
|
|--data
| |--session
|
|--public
|--index.php
|--.htaccess
在我的控制器目录中,我有两个控制器:IndexController
和TestController
,它们具有相同的内部定义,有两种方法,indexAction
和testingAction
。当我将浏览器指向localhost/application
时,我会得到IndexController.indexAction()
的结果,但是当我转到localhost/test
或localhost/testing
或localhost/test
或其他任何其他变体时,我收到404 Not Found错误。
我正在使用Zend Framework(我认为是1.9.6),并且我已经确认各种源PHP文件在语法错误方面没有问题。
为什么我会看到这种行为,我该怎么做才能解决它?
修改
我让另一位开发人员向我发送了一个完整的基于Zend的应用程序来比较我的设置。在文件位置或各种配置文件的内容方面没有明显差异。但是,在他的网站上,我只能访问网站的索引页面,但没有内部控制器。他没有那个问题。这可能是我的Apache设置的问题吗?
答案 0 :(得分:3)
检查Apache配置。似乎.htaccess
mod_rewrite
无法正常工作
更新1:
还要检查:
<Directory "/Applications/MAMP/htdocs"> # OR WHAT IS IN YOU CONF FILE
... SKIP ...
#
# 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
... SKIP ...
</Directory>
用于AllowOverride All
选项。没有它.htaccess
文件不起作用
答案 1 :(得分:1)
localhost/public/index/index
,结果为indexController.indexAction。当您指向localhost/test
时,它会找到localhost/test/index
而localhost/testing
会产生localhost/testing/index
。因此,您应该尝试 localhost/test/testing
。
答案 2 :(得分:0)
您应该将浏览器指向localhost/public
,其中应包含.htacess
文件和index.php
。如果您使用已启动的应用程序作为基础,则应设置.htaccess
配置,以便将导致404的所有请求最终传递给index.php
,然后启动应用程序,加载适当的控制器。
修改强>
你也有一些错误的功能(我认为)。如果你转到localhost/test
,它应该调用测试控制器中的索引操作(除非你在配置中定义了另一个默认操作)。
因此,如果您在测试控制器中有一个名为test的操作,则需要访问:
本地主机/公共/测试/检验/
如果您设置了错误控制器,它会有所帮助,因为它可以使调试变得更加容易。例如,当我尝试访问不存在的操作时,我得到了这个(当处于开发模式时):
消息:操作“索引”不存在且未被捕获在__call()
中堆栈追踪:
...请求参数:
阵列 'controller'=&gt;字符串'mod'(长度= 3)
'action'=&gt;字符串'index'(长度= 5)
'module'=&gt;字符串'default'(长度= 7)
答案 3 :(得分:0)
你必须indexAction
TestController
才能使用localhost/test
等网址