自定义路由逻辑并提供静态内容,同时将文档根目录放在公共目录的父目录中?

时间:2012-05-21 01:05:48

标签: zend-framework url-routing

我在Zend Framework中扩展Zend_Controller_Router_Route_Abstract以向我的应用程序添加自定义路由。我的match方法返回false,以确定请求路径不是必须处理的路径。因此,对于路径,如静态资源路径,我的自定义路由类返回false,默认模块路由器负责。

我的问题是,所有工作都很好,因为我的网站的文档根目录指向我的公共目录。当我将文档根目录更改为公共文件夹中的目录(父目录)时,尝试请求http://mysite.com/css/global.css之类的静态资源时会出现以下错误:

  

发生错误页面未找到异常信息:

     

消息:指定的控制器无效(css)堆栈跟踪:   堆栈跟踪:....

     

请求参数:

  array (   'controller' => 'css',   'action' => 'global.css',   'module' => 'default', )

这只是信息的一部分,另一部分则无关紧要。

我的问题是,我该如何解决这个问题?如何在将文档根目录放在公共目录的父目录中时,如何拥有自定义路由逻辑并提供静态内容?

这里是我在文档根目录未指向公共目录时使用的.htaccess:

  

RewriteEngine On

     

RewriteRule ^ .htaccess $ - [F]

     

RewriteCond%{REQUEST_URI} =“/”RewriteRule ^。* $ /public/index.php   [NC,L]

     

RewriteCond%{REQUEST_URI}!^ / public /。 $ RewriteRule ^(。)$ / public / $ 1

     

RewriteCond%{REQUEST_FILENAME} -f RewriteRule ^。* $ - [NC,L]

     

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

1 个答案:

答案 0 :(得分:1)

您不应该从PHP服务静态文件。这意味着你应该使用:

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