php 实现路由
PHP 实现路由的方法
在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法:
使用原生 PHP 实现简单路由
通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以下是一个简单的示例:
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
case '/':
require 'home.php';
break;
case '/about':
require 'about.php';
break;
default:
http_response_code(404);
require '404.php';
break;
}
使用 .htaccess 文件实现路由
通过 Apache 的 .htaccess 文件将所有请求重定向到单一入口文件(如 index.php),然后在 PHP 中解析路由:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
在 index.php 中解析 URL:

$url = isset($_GET['url']) ? $_GET['url'] : '/';
$routes = [
'/' => 'home.php',
'/about' => 'about.php',
];
if (array_key_exists($url, $routes)) {
require $routes[$url];
} else {
http_response_code(404);
require '404.php';
}
使用第三方路由库
对于更复杂的路由需求,可以使用现有的 PHP 路由库,如 Symfony Routing 或 FastRoute:
安装 FastRoute:

composer require nikic/fast-route
使用 FastRoute 实现路由:
require 'vendor/autoload.php';
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/', 'home_handler');
$r->addRoute('GET', '/about', 'about_handler');
});
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];
$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
case FastRoute\Dispatcher::NOT_FOUND:
// 处理 404
break;
case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
// 处理 405
break;
case FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
call_user_func($handler, $vars);
break;
}
实现 RESTful 路由
对于 RESTful API,可以根据 HTTP 方法(GET、POST、PUT、DELETE)设计路由:
$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($method === 'GET' && $path === '/users') {
// 获取用户列表
} elseif ($method === 'POST' && $path === '/users') {
// 创建用户
} elseif ($method === 'GET' && preg_match('/^\/users\/(\d+)$/', $path, $matches)) {
$userId = $matches[1];
// 获取单个用户
}
使用框架自带的路由功能
大多数现代 PHP 框架(如 Laravel、Symfony)都内置了强大的路由系统。以 Laravel 为例:
Route::get('/', function () {
return view('home');
});
Route::get('/about', function () {
return view('about');
});
路由实现的关键点
- URL 解析:正确解析请求的 URL 和 HTTP 方法。
- 路由匹配:将解析后的 URL 与预定义的路由规则进行匹配。
- 参数提取:从 URL 中提取动态参数(如 /users/{id})。
- 错误处理:处理 404(未找到)和 405(方法不允许)等情况。
- 中间件支持:在路由前后添加中间件逻辑(如身份验证)。
以上方法可以根据项目需求选择适合的实现方式,从简单的手动路由到使用成熟的第三方库或框架。






