2014-11-04 36 views
-2

我想寫一個適當的.htaccess規則和PHP代碼解析URL像這樣的:https://myapi.com/1.1/users/search.json?q=abc&page=1&count=3如何寫的.htaccess Twitter的API像URL

這是我迄今發現:

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 

我怎樣才能與重寫規則和PHP代碼的可選部分?

+0

目前還不清楚你想重寫什麼。你能清楚地指出一個例子,說明URL在重寫規則時的樣子以及在重寫後應該如何看待? – 2014-11-04 15:25:59

+0

如果提供了參數,則url應該重定向到'index.php?url = $ 1&type = $ 2&params = $ 3'。 – maryus 2014-11-04 15:35:18

回答

1

我的建議是使用一個非常簡單的重寫前端控制器(如index.php),然後使用該文件中的代碼來評估請求的路由。

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

在您的API例子,那麼你將有paremeters Q,網頁,由於對重寫規則的QSA(查詢字符串追加)標誌計數$_GET可用。

這留給你來解釋其餘的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. 

你可能會考慮谷歌搜索PHP URL routing來獲得如何建立一個適當的路由器更多的例子,因爲這只是一個非常簡單的例子,不包括任何種類的驗證或更復雜的路由處理的。

這種方法的好處是,它使您的路由邏輯全部使用PHP,而不是在Apache服務器配置和PHP之間進行分割。如果你需要改變路由,你只需要PHP。這也可以防止路由信息與$_GET中的實際參數信息混合,就像您提出的重寫一樣。