我的建議是使用一個非常簡單的重寫前端控制器(如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
中的實際參數信息混合,就像您提出的重寫一樣。
目前還不清楚你想重寫什麼。你能清楚地指出一個例子,說明URL在重寫規則時的樣子以及在重寫後應該如何看待? – 2014-11-04 15:25:59
如果提供了參數,則url應該重定向到'index.php?url = $ 1&type = $ 2&params = $ 3'。 – maryus 2014-11-04 15:35:18