你绝对应该使用parse_url
选择URL的正确部分 - 以防万一?query
或#fragment
存在于URL
$parts = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
$parts[0]; // 'domain.com'
$parts[1]; // 'article'
$parts[2]; // '1123'
您可能也想将它们作为名称引用。你可以做到这一点典雅,array_combine
$params = array_combine(['domain', 'resource', 'id'], $parts);
$params['domain']; // 'domain.com'
$params['resource']; // 'article'
$params['id']; // '1123'
我真的感觉像一个拖拉所以我现在让你有点路由器。你现在不必费心解剖这些东西;首先学习如何使用它,然后你可以稍后将它分开。
function makeRouter ($routes, callable $else) {
return function ($url) use ($routes, $else) {
foreach ($routes as $route => $handler) {
if (preg_match(makeRouteMatcher($route), $url, $values)) {
call_user_func_array($handler, array_slice($values, 1));
return;
}
}
call_user_func($else, $url);
};
}
function makeRouteMatcher ($route) {
return sprintf('#^%s$#', preg_replace('#:([^/]+)#', '([^/]+)', $route));
}
function route404 ($url) {
echo "No matching route: $url";
}
OK,所以在这里我们将定义我们的路线,什么是应该在每个路径上发生现在
// create a router instance with your route patterns and handlers
$router = makeRouter([
'/:domain/:resource/:id' => function ($domain, $resource, $id) {
echo "domain:$domain, resource:$resource, id:$id", PHP_EOL;
},
'/public/:filename' => function ($filename) {
echo "serving up file: $filename", PHP_EOL;
},
'/' => function() {
echo "root url!", PHP_EOL;
}
], 'route404');
让我们来看看它做我们的招标......
$router('/domain.com/article/1123');
// domain:domain.com, resource:article, id:1123
$router('/public/cats.jpg');
// serving up file: cats.jpg
$router('/');
// root url!
$router('what?');
// No matching route: what?
呀,我真的那无聊与我目前的工作任务...
什么问题?你做了什么不能得到它? –
你在使用框架吗?如果是这样,哪一个 – RiggsFolly
可能重复[非常简单的正则表达式来获取网址中的数字:http://artige.no/bilde/6908](http://stackoverflow.com/questions/7807692/very-simple-regex-在网址-http-artige-no-bilde-6908) –