API URL mod_rewrite

时间:2011-02-15 09:56:11

标签: apache zend-framework .htaccess mod-rewrite

我正在使用Zend Framework来创建API

我想用apache mod_rewrite来改变一些URI, 但我仍然处于n00b级别的apache rewite的

目前我正在使用默认的ZF .htaccess文件删除index.php文件,并且非常符合URI:

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

目前URI看起来像这样:

http://domain.com/module/index/action/id/5/format/json

我想做什么:

  • 如果控制器(在/ module之后)等于“索引”,则应从URI中删除它。
  • 如果操作后有 int ,则应删除“ id ”参数并仅传递该值。
  • 最后我希望将格式作为后缀添加到URI 的末尾,例如。 ... /动作/ 5.json

这样当我得到以下URI时:

http://domain.com/module/action/5.json

它仍然会指向:

http://domain.com/module/index/action/id/5/format/json

是否有可能在一个声明中完成所有这些? 或者在ZF Bootstrap中添加自定义路由会更好吗?

1 个答案:

答案 0 :(得分:0)

通常在Zend Framework应用程序中,在mod_rewrite级别使用Apache的.htaccess进行的唯一URL重写是您在问题中的重写。这会通过框架推送所有请求,然后框架具有处理请求的内部机制。

将url映射到(模块,控制器,操作)三元组和设置请求参数的内部过程称为“路由”。 Zend Framework允许您定义自定义路由。

通常,路由是在引导阶段定义的;毕竟,它必须在流程的早期完成,以便系统可以确定需要实例化哪个控制器来处理请求。

ZF documentation for routing很好地描述了它。

总结:最好通过应用程序中定义的自定义路线来完成此任务。