2011-04-19 84 views
0

我已经做了以下命令:zf创建控制器关于 - 获取404 - 为什么?

zf create controller About 

所以,Zend的工具已经创建了一个控制器,一个指数动作的索引视图。

如果我再转到: http://mysite.dev/about/

我得到了一个404错误。

这是由于这个事实,在我的AboutController的Index动作中,我没有任何东西说“去查看视图”?

如果是这样,我应该怎么做才能让视图显示而不是404?

在我的.htaccess文件,位于:*〜/的public_html/mysite.dev /公/ *我:

Options +FollowSymlinks 

SetEnv APPLICATION_ENV development 

RewriteEngine On 

#hotlinking 
RewriteCond %{HTTP_REFERER} !^$ [OR] 
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mysite\.dev [NC,OR] 
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mysite\.something\.com [NC] 
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

的/ etc/apache2的/网站可用我:

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName mysite.dev 

DocumentRoot /home/user/public_html/mysite.dev/public 

<Directory /home/user/public_html/mysite.dev/public> 
DirectoryIndex index.php 
Options Indexes FollowSymLinks MultiViews 
AllowOverride All 
Order allow,deny 
Allow from all 
</Directory> 

</VirtualHost> 

请注意,在这个配置中,当我键入命令来创建一个新的Zend项目我得到了初步的Zend页面正确调用。

更新:

我已经改变.htaccess文件以下行,现在它的工作:

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

所以我添加了一个-s标志和-l标志,并且取出-d标志和包含!-f标志的行的否定。

拥有!-d和!-f的要点是允许访问目录和文件,而不需要重定向。所以,如果它是一个文件,并且如果存在,那么不要重定向。如果其他东西不是文件或目录(即控制器调用),则重定向。

我不明白为什么,有了这个改变,我得到了它的工作。 :(

为什么?

再次感谢。

+0

是正确的.htaccess安装程序和url重写可用的虚拟主机?一个新的空行为将显示新的空视图...不是404错误。 – MiPnamic 2011-04-19 12:16:39

+0

hhmmm ...所以我有一个问题... :(我将更新我的问题和粘贴htaccess文件和虚拟主机信息。谢谢 – MEM 2011-04-19 12:23:46

+0

它是一个Zend错误控制器404或apache 404? – Gnuffo1 2011-04-19 12:41:00

回答

1
RewriteCond %{REQUEST_FILENAME} **!**-d 
RewriteCond %{REQUEST_FILENAME} **!**-f 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

的erorr是在的RewriteCond感叹号,你说的apache,如果请求的文件名心不是一个目录,而不是一个普通的文件去直接,否则去index.php

你需要反转他们就像你已经在新的htaccess文件:

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

然后有两个问题:1)为什么我们需要这些-s和-l标志? 2)我认为我说的是,如果请求文件名不是目录,也不是普通文件,那么重写。我们在哪里可以阅读“直走”部分?再次感谢。 – MEM 2011-04-19 13:31:47

+1

“直行”(对我英语不好的英语)是这样的: RewriteRule ^。* $ - [NC,L],前三行对于在公共目录中查找物理文件时非常有用,如图像,CSS等..没有重定向到index.php – Cristian 2011-04-19 13:33:53

+0

我有一个坏的英文我自己所以,不要担心。 :)我们在哪里可以阅读“否则”?我们有三个条件和两个规则,第二个规则只适用于第一条规则不适用的情况吗? – MEM 2011-04-19 13:40:06