我在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]
答案 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]