如何为urps编写.htaccess for twitter API

时间:2014-11-04 15:22:15

标签: php .htaccess rest mod-rewrite

我想写一个正确的.htaccess规则和PHP代码来解析这样的网址:https://myapi.com/1.1/users/search.json?q=abc&page=1&count=3

这是我到目前为止所发现的:

RewriteRule ^([a-zA-Z_-])\.(xml|json)$   index.php?url=$1&format=$2

我的PHP代码看起来像

$requestParts = explode('/', $_GET['url']);
$contentType = $_GET['type'];
//$params = ... //Here's where I'm lost

如何使用RewriteRule和PHP代码获取可选部分?

1 个答案:

答案 0 :(得分:1)

我的建议是对前端控制器(如index.php)使用非常简单的重写,然后使用该文件中的代码来评估请求的路由。

RewriteRule ^index\.php$   index.php [L,QSA]

在您的api示例中,由于重写规则上的QSA(查询字符串追加)标记,您将在$_GET中获得paremeters q,page,count。

这样就可以解释URI的其余部分了。

你可以这样做而不是简单地使用简单的字符串操作技术。

// discard query string after trimming leftmost '/' from URI
$uri_parts = explode('?', ltrim($_SERVER['REQUEST_URI'], '/'));
$uri_base = $uri_parts[0];
// get routing information from URI
$route_parts = explode('/', $uri_base);
$api_version = $route_parts[0];
$controller = $route_parts[1];
$action_parts = explode('.',$route_parts[2]);
$action = $action_parts[0];
$format = $action_parts[1];
// your parameters would be in $_GET['q'], $_GET['page'], etc. 

您可能会考虑使用Google搜索PHP URL routing来获取有关如何设置正确路由器的更多示例,因为这只是一个非常基本的示例,并不包含任何类型的验证或处理更复杂的路由。

这种方法的好处是它可以将您的路由逻辑全部保存在PHP中,而不是在Apache服务器配置和PHP之间进行拆分。如果需要进行路由更改,则只能在PHP中进行。这也可以防止路由信息与$_GET内的实际参数信息混合,就像您提议的重写一样。