我已经使用 Zend 框架多年,但已经意识到我们现在正在修复的错误处理的一些关键问题。(我在这里发布了一个不同的问题:为什么我的网站总是使用 ErrorController 来处理所有类型的错误,而不管 HTTP 状态代码如何?在那里解释这个故事)。
我的问题是一个快速的问题。Zend Framework 的常见 .htaccess 文件是什么样的?
根据最新的 ZF 文档,
SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
但是,以上内容对我来说是新的 - 有人可以解释它究竟做了什么吗?我当前的 .htaccess 文件有很多 301 重定向代码,但为了这篇文章的目的,我只会在此处粘贴相关信息:
ErrorDocument 404 http://www.mydomain.com/pagenotfound/
ErrorDocument 503 http://www.mydomain.com/service-unavailable/
RewriteCond %{REQUEST_URI} !^/liveagent
RewriteCond %{REQUEST_URI} !^/blog
RewriteRule !\.(js|ico|gif|GIF|jpg|JPG|jpeg|png|PNG|pdf|css|html|xml|swf|php|mp3|mp4|webm|ogv|f4v|flv|txt|wsdl|css3|ttf|eot|svg|woff)$ index.php
以上对我们来说工作正常,基本上不允许“liveagent”和“blog”(Wordpress)目录与 Zend 一起运行,但我意识到我现在需要进行以下更改:
必须从代码中删除 ErrorDocument 404,因为 Zend 框架应该处理所有错误。但是,当我删除它时,转到像 www.mydomain.com/this-does-not-exist.php 这样的 URL 会导致 404 错误标准 Apache 页面 - 它不会加载 ZF 或 ErrorController。这是因为上述 RewriteRule 中的“php”排除。我不只是想删除它,因为我们有时希望能够访问根目录上的 php 文件,例如我们用于将站点置于维护模式的单独的“holding.php”文件。
标准做法是什么?我应该删除 php 扩展名吗?但是,这不会解决其他 404 问题,例如 www.mydomain.com/this-does-not-exist.css,这也是上述 RewriteRule 中的排除项(即 CSS)。
因此,我是否应该将上述内容完全更改为 Zend 的 .htaccess 新代码,如上所述?
如果是这样,我是 htaccess 的初学者——如何修改 .htaccess 代码以允许 CSS、JS、视频文件等以及博客和 liveagent 目录从 Zend 框架中排除?