php 实现路由
在PHP中实现路由功能可以通过多种方式完成,以下是一种常见的实现方法:
使用.htaccess文件重定向
创建一个.htaccess文件放在项目根目录,将所有请求重定向到单一入口文件(如index.php)。示例内容如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
创建路由解析类
构建一个简单的路由类来处理URL解析和路由映射:
class Router {
private $routes = [];
public function addRoute($path, $callback) {
$this->routes[$path] = $callback;
}
public function dispatch() {
$url = $_GET['url'] ?? '/';
foreach ($this->routes as $path => $callback) {
if ($path === $url) {
return call_user_func($callback);
}
}
http_response_code(404);
echo '404 Not Found';
}
}
定义路由规则
在入口文件index.php中实例化路由并定义路由规则:
$router = new Router();
$router->addRoute('/', function() {
echo 'Home Page';
});
$router->addRoute('/about', function() {
echo 'About Page';
});
$router->dispatch();
支持动态路由参数
扩展路由类以支持动态参数匹配:
public function addRoute($path, $callback) {
$this->routes[$path] = [
'callback' => $callback,
'regex' => '#^'.preg_replace('/\/:([^\/]+)/', '/(?<$1>[^/]+)', $path).'$#'
];
}
public function dispatch() {
$url = $_GET['url'] ?? '/';
foreach ($this->routes as $path => $route) {
if (preg_match($route['regex'], $url, $matches)) {
$params = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
return call_user_func_array($route['callback'], $params);
}
}
http_response_code(404);
echo '404 Not Found';
}
使用示例
$router->addRoute('/user/:id', function($id) {
echo "User ID: $id";
});
考虑使用现有框架
对于生产环境,建议考虑使用成熟的PHP框架如Laravel、Symfony或Slim,它们都提供了完善的路由系统。例如Laravel的路由示例:

Route::get('/', function () {
return view('welcome');
});
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
以上方法提供了从基础到进阶的路由实现方案,可根据项目需求选择合适的实现方式。






