2010-01-22 95 views
3

我很难让我的头脑使用REST风格的URLS。我可以得到一些帮助吗?现在我有一个查询字符串,像这样:REST风格的URL和PHP

example.com/calendar_expanded?date=1270094400

我有一个国防部重写是在隐瞒了PHP扩展。我如何

  1. 使这个calendar_expanded/date/1270094400发生。
  2. $_GET从事后的URL值?

我喜欢背后的概念,但每天工作16个小时以满足整个月的截止日期对我的大脑产生影响。

感谢您的帮助。

+1

也许只需要更新您的重写规则是这样的:'重写规则^ calendar_expanded /日期/ ([0-9] +)$ calendar_expanded.php?date = $ 1' – anomareh 2010-01-22 22:46:30

回答

3

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

这样,每个请求都由框架处理,您可以灵活地设计您的URL,但它们应该看起来像。

E.g. Symfony支持开箱即用的REST风格设计。

顺便说一句,如果参数在某种程度上是固定的并指定了资源,例如博客文章的标题,那么RESTful URL才有意义。如果您只想将参数传递给控制一个表的排序(即某些东西的视图),那么这应该作为查询字符串中的“普通”GET参数。

在你的情况下,它看起来像你想控制哪一天应该显示在日历中。我个人会在这里使用普通的GET查询字符串。

+0

Kohana是我们工作时使用的框架。它默认将一个像example.com/my_controller/controller_method/param1/param2这样的URL路由到一个名为“controller_method”的控制器中,该控制器名为“my_controlled”,参数“param1”和“param2”...漂亮NEATO。 – sberry 2010-01-22 23:10:51

+0

我认为这是最正确的答案,费利克斯看着我真正想做的事情。你是对的,我通过日期变量来控制日历。我想我会坚持我现有的格式。我将阅读这篇文章,因为我觉得它可能在某些时候派上用场。谢谢。 – jay 2010-01-23 03:12:17

+2

+1用于区分REST和外观漂亮的网址。我看到一些混淆,人们认为通过使用URL重写,他们使他们的应用程序成为RESTful--事情并非总是如此。 – 2010-01-23 16:18:11

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中可用。

2

这是你在找什么?

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

这是我记得的CakePHP做的,当它第一次来到了......说不上来,如果它仍然没有...