REST风格的URL和PHP

时间:2010-01-22 22:43:44

标签: php rest get

我很难用REST风格的URL来解决问题。我可以得到一些帮助吗?现在我有一个像这样的查询字符串:

example.com/calendar_expanded?date=1270094400

我有一个隐藏.php扩展名的mod重写。我如何

  1. calendar_expanded/date/1270094400成为现实。
  2. $_GET事后的网址值?
  3. 我喜欢它背后的概念,但是工作16个小时以满足整个月的最后期限会对我的大脑产生影响。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您需要检查$_SERVER[ 'REQUEST_URI' ]$_SERVER[ 'PATH_INFO' ],而不是$_GET

$_SERVER[ 'REQUEST_URI' ]将保留/calendar_expanded/date/1270094400?quertStringParams=1&etc... $_SERVER[ 'PATH_INFO' ]将保留此/calendar_expanded/date/1270094400

换句话说,您必须使用explode()等来将这些值细分为单独的细分。我建议您使用$_SERVER[ 'PATH_INFO' ]作为主题,因为真实的查询字符串变量已经在$_GET中可用。

答案 1 :(得分:3)

如果您想创建相当多的REST URL,您应该考虑使用一个使用Front Controller设计模式的PHP框架。

这样,每个请求都由框架处理,您可以灵活地设计网址,但它们应该是这样的。

E.g。 Symfony支持开箱即用的RESTful设计。

BTW RESTful URL仅在参数以某种方式修复并指定资源(例如博客文章的标题)时才有意义。如果您只想将参数传递给例如控制表的排序(即某事物的视图)然后这应该作为“正常”GET参数进入查询字符串。

在您的情况下,您似乎想要控制日历中应显示的日期。我个人只会在这里使用普通的GET查询字符串。

答案 2 :(得分:2)

这是你要找的吗?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ calendar_expanded.php?url=$1 [QSA,L]
</IfModule>

这就是我记得CakePHP第一次出现时所做的事情......不知道它是否仍然存在......