我很难用REST风格的URL来解决问题。我可以得到一些帮助吗?现在我有一个像这样的查询字符串:
example.com/calendar_expanded?date=1270094400
我有一个隐藏.php扩展名的mod重写。我如何
calendar_expanded/date/1270094400
成为现实。$_GET
事后的网址值?我喜欢它背后的概念,但是工作16个小时以满足整个月的最后期限会对我的大脑产生影响。
感谢您的帮助。
答案 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第一次出现时所做的事情......不知道它是否仍然存在......