Zend框架路径问题

3

大家好,

我想查看除“欢迎使用Zend Framework”屏幕之外的任何页面。

我从以下教程下载了项目: http://framework.zend.com/docs/quickstart/create-a-form (Zend Framework Quickstart)

据我所知,路径是正确的。我阅读了这篇帖子: http://www.johnmee.com/2008/11/zend-framework-quickstart-tutorial-deploy-to-a-subdirectory-instead-of-web-root/ 我认为它可能有点过时了,因为引导代码不像他描述的那样。

有人有什么想法吗?我认为来自Zend的教程下载应该可以开箱即用。

总结: http://localhost/ZendFrameworkQuickstart/public/ 显示:Zend欢迎页面

http://localhost/ZendFrameworkQuickstart/public/guestbook 显示:404

谢谢!

更新 “public”目录的物理路径: C:\Zend\Apache2\htdocs\ZendFrameworkQuickstart\public

我从浏览器访问的URL: http://localhost/ZendFrameworkQuickstart/public/guestbook

.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 ^.*$ /ZendFrameworkQuickstart/Public/index.php [NC,L]

更新:更改文件中的行

.htaccess RewriteRule ^.*$ /ZendFrameworkQuickstart/public/index.php [NC,L]

application.ini resources.frontController.baseUrl = "/ZendFrameworkQuickstart/public"

public/index.php error_reporting( E_ALL | E_STRICT ); ini_set( 'display_errors', 1 );


2
“guestbook” 实际上是在 “public” 目录下的一个目录,还是 “public” 目录使用了 “mod_rewrite”? - Jacob Relkin
不,留言簿不是公共目录下的一个文件夹。我的Apache配置中已经启用了mod_rewrite。我还需要在public目录内部进行某种配置吗? - RepDetec
你在 .htaccess 文件的最后一个 RewriteRule 中有一个打字错误:apache 是大小写敏感的,所以 Public 应该改为 public。请确保取消注释 $front->setBaseUrl($value) - Decent Dabbler
哦,关于大小写敏感性的说法我撤回了,事实证明它在我的Windows电脑上并不成立。对此我深表歉意。如果在引导程序中的setBaseUrl()方法无法解决问题,那么恐怕我已经没有更多的想法了。 - Decent Dabbler
2个回答

2

终于搞定了。在Apache的httpd.conf文件中,将每个实例的"AllowOverride None"更改为"AllowOverride All"。

我不确定为什么Zend没有设置这个,因为我的Zend Framework安装设置了Apache。在进行此更改后,快速入门程序可以按原样运行(甚至不需要位于根目录中)。

感谢所有的帮助!


0

针对Jacob的评论,我认为在Quickstart应用程序的.htaccess文件中,mod_rewrite条件和规则期望一切都相对于域的根目录,并特别将所有内容重写到域的根目录(具体而言是/index.php)。

所以,你可以:

  • 调整.htaccess中的rewrite条件和规则;或者
  • 让虚拟主机的根目录直接指向Quickstart应用程序的public文件夹。

此外,请确保在你的服务器上启用了mod_rewrite(假设你正在使用apache服务器)。

编辑 由于你的应用程序不是从服务器的根目录运行的,因此你可能仍然需要在引导程序中设置baseUrl。例如:

$front = Zend_Controller_Front::getInstance();
$front->setBaseUrl( '/ZendFrameworkQuickstart/public' );

但是,你可以避免很多麻烦,只需将你的应用程序放在服务器的根目录下,或者让你的服务器根目录指向httpd.conf中的public文件夹,如果这两个选项对你都适用的话。

如果你这样做了,请确保将.htaccess恢复为默认设置。


fireeyeboy,我没有在博客中对“setBaseUrl”调用做任何操作。我在引导文件或其他任何地方找不到这个方法。关于.htaccess内容和公共文件夹的绝对位置,请参见上面的内容。感谢您的帮助! - RepDetec
所以,我在FrontController.php文件中找到了“setBaseUrl”方法。我将其注释掉了,但仍然得到404错误。代码行: //$front->setBaseUrl($value); - RepDetec
FrontController.php不是编辑此内容的地方,因为这是一个库文件(我相信)。请参见我上面编辑过的答案。您应该在引导程序中定义baseUrl。 - Decent Dabbler
我应该把这些东西放在Bootstrap的哪里?如果我把: $front = Zend_Controller_Front::getInstance();放在_initAutoload中,应用程序就会挂起。 - RepDetec
此外,请确保在您的测试服务器上将显示错误设置为打开状态。这将在应用程序挂起时提供有价值的错误信息,而不是空白屏幕。要这样做,请将以下内容放置在您的index.php文件的顶部: error_reporting( E_ALL | E_STRICT ); ini_set( 'display_errors', 1 ); - Decent Dabbler
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接