在PHP MVC框架中处理3xx / 4xx请求?

时间:2009-09-21 04:35:00

标签: php model-view-controller web-frameworks

如果说你正在使用流行的:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L,QSA]

并且你试图让你的mvc web框架处理404,如果你没有找到指定URI的相应视图,你只需在php应用程序本身内手动发送404 http头,对吧?这是在Zend / Kohana和其他框架中完成的吗?

另一个问题,假设您重写了整个网站,并且想要设置301。你会在配置路由的地方(Django中的urls.py等正则表达式样式)或Virtualhost指令中执行此操作吗?

基本上,如果我的Web框架正在处理路由,我是否应该修改VirtualHost中的RewriteRules?

1 个答案:

答案 0 :(得分:1)

在404,一般来说,是的。

就永久重定向而言,我认为它取决于上下文。如果我的路由解决方案支持以任何理智的方式进行,我可能会去做,除非我预计会遇到大的扩展问题。

意思是,如果我处理繁忙的流量,并且有很多静态内容要服务(但不是那么大,以至于我使用的是除了作为Web服务器之外的任何东西),我可能最终在fcgi下运行php以保持apache流程变薄(使用比prefork更好的MPM)。在这种情况下,我可能最终会使URL短路并让Web服务器进行重定向。

但即便在这种情况下,也没有理由不首先在你的路由框架中完成它。

这样,如果请求滑过,即使它们变慢,事情仍然有效。