2010-08-24 89 views
0

我建立了一个Zend应用程序,并完成了在我的开发工作站上设置modrewrite和编写.htaccess文件(如下所示)的基本步骤。现在,当我转到项目的根目录时,Zend正常工作,调用控制器并显示相应的页面。但是,当我调用任何控制器时,我会希望它重定向到相同的index.php文件,这会反过来将它指向适当的控制器和动作(例如,myurl/controller/action将被myurl读取/index.php然后重定向到适当的动作)。Zend和modrewrite不能正常工作

我怀疑这个问题在某种程度上与我设置我的.htaccess文件有关,因为调用基本网址确实可以正常工作。但我一直无法弄清楚什么是错的。有没有人有建议?

Options +FollowSymLinks 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
+0

取而代之的是什么?你是否指向'ErrorController'索引操作,或? – 2010-08-24 15:03:17

+0

不,我收到404错误。具体而言,“在此服务器上未找到请求的URL /index.php”。 – Elie 2010-08-24 15:07:47

+1

哦......这很奇怪。该应用程序是在'DOCUMENT_ROOT'还是一个子目录? – 2010-08-24 15:40:52

回答

1

好的,这是它是什么。

我的DOCUMENT_ROOT被设置为/ var/www,而我的应用程序用完了/ var/www/app1,其中的所有内容都已设置。由于行RewriteBase /它被重定向到DOCUMENT_ROOT而不是APPLICATION_ROOT。我通过将该行更改为:

RewriteBase /app1 

现在一切正常。

+1

(对不起,去吃午饭,然后开会)啊,当然是'RewriteBase'。 [module documentation](http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase)表明在大多数情况下都是必须的,但这通常是不真实的(事情应该也能正常运行如果你完全忽略它),所以我觉得有点误导。无论如何,好赶上,+1 – 2010-08-24 19:48:48

+0

谢谢!您对DOCUMENT_ROOT的评论让我想起了这一点,因为我有几个站点运行了我的单个Apache服务器,但是现在只有这个站点正在使用modrewrite。 – Elie 2010-08-25 12:52:16

+0

我误以为DocumentRoot应该设置为/ var/www/app1/public? – Herbert 2012-06-01 20:12:17