当前位置: 首页 > news >正文

PHP伪静态与URL路由详解

PHP伪静态与URL路由详解

URL重写让动态URL变成静态形式,对SEO和用户体验有好处。今天说说PHP中URL路由和伪静态的实现。

URL重写通过Web服务器配置实现。

```apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
```

PHP端的路由解析。

```php
class Router
{
private array $routes = [];

public function get(string $uri, callable $handler): void
{
$this->addRoute('GET', $uri, $handler);
}

public function post(string $uri, callable $handler): void
{
$this->addRoute('POST', $uri, $handler);
}

private function addRoute(string $method, string $uri, callable $handler): void
{
$uri = preg_replace('/\{(\w+)\}/', '(?P<$1>[^/]+)', $uri);
$this->routes[$method][] = ['pattern' => '#^' . $uri . '$#', 'handler' => $handler];
}

public function dispatch(string $method, string $uri): void
{
$uri = parse_url($uri, PHP_URL_PATH);

foreach ($this->routes[$method] ?? [] as $route) {
if (preg_match($route['pattern'], $uri, $matches)) {
$params = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
echo ($route['handler'])($params);
return;
}
}

http_response_code(404);
echo "404 Not Found";
}
}

$router = new Router();
$router->get('/articles/{id}', fn($p) => "文章 #{$p['id']}");
$router->get('/articles/{id}/edit', fn($p) => "编辑文章 #{$p['id']}");
$router->get('/users/{id}/posts/{postId}', fn($p) => "用户{$p['id']}的文章{$p['postId']}");

$router->dispatch('GET', '/articles/42');
echo "\n";
$router->dispatch('GET', '/articles/42/edit');
echo "\n";
$router->dispatch('GET', '/users/1/posts/10');
echo "\n";
?>

路由中的中间件支持。

```php
class RouteWithMiddleware
{
private array $routes = [];
private array $globalMiddlewares = [];

public function addMiddleware(callable $middleware): void
{
$this->globalMiddlewares[] = $middleware;
}

public function get(string $uri, callable $handler, array $middlewares = []): void
{
$this->routes['GET'][] = compact('uri', 'handler', 'middlewares');
}

public function dispatch(string $method, string $uri): void
{
$uri = parse_url($uri, PHP_URL_PATH);

foreach ($this->routes[$method] ?? [] as $route) {
$pattern = preg_replace('/\{(\w+)\}/', '(\w+)', $route['uri']);
$pattern = '#^' . $pattern . '$#';

if (preg_match($pattern, $uri, $matches)) {
array_shift($matches);
$allMiddlewares = array_merge($this->globalMiddlewares, $route['middlewares']);
$handler = $route['handler'];

foreach (array_reverse($allMiddlewares) as $mw) {
$next = $handler;
$handler = fn($params) => $mw($params, $next);
}

echo $handler($matches);
return;
}
}

http_response_code(404);
}
}
?>

路由参数验证。

```php
class RouteValidator
{
private array $patterns = [
'id' => '\d+',
'slug' => '[a-z0-9-]+',
'uuid' => '[0-9a-f-]+',
];

public function pattern(string $name, string $pattern): void
{
$this->patterns[$name] = $pattern;
}
}
?>

URL路由框架的核心就是URL匹配和参数提取。理解了路由的原理,不管是配置框架路由还是排查路由问题,心里都有底了。伪静态URL让地址更美观,对搜索引擎也更友好。

http://www.jsqmd.com/news/975354/

相关文章:

  • SPT-AKI Profile Editor:5个理由告诉你为什么这是逃离塔科夫离线版最佳存档编辑器
  • 本地生活服务 GEO 怎么做强索引:南京周周、Nina、大卫三主体分流案例
  • 2026年兰州短视频运营服务商怎么选?甘肃企业从获客困局到转化闭环的完整指南 - 精选优质企业推荐官
  • 从M•CORE到ColdFire:嵌入式系统迁移实战与驱动适配指南
  • 橡果教育_PROE/CREO结构设计培训班课程重点学习教学大纲内容盘点 - 左岸花开Acorn
  • 027、代码替换精准控制:old_string 的构造技巧、replace_all 场景与陷阱
  • 2026石家庄东方雨虹防水代理商排行榜|全域一级总代优选 - 资讯焦点
  • 从一次线上金额比对Bug说起:手把手教你用BigDecimal.compareTo做可靠比较
  • 终极指南:如何在Windows中免费快速预览HEIC文件缩略图
  • 深度解析:OpCore-Simplify如何实现黑苹果EFI配置的智能自动化
  • 怎么制作投票活动?(校园歌手大赛网络评选投票活动操作详解) - 微信投票小程序
  • pyupgrade:自动升级 Python 代码语法的工具
  • 泸州白酒代工厂怎么选?2026年OEM/ODM服务商对标评测与采购决策指南 - 精选优质企业推荐官
  • 常州市明扬物资回收:常州净化车间整厂打包回收公司 - LYL仔仔
  • 保姆级教程:用Docker Compose一键部署qBittorrent+Transmission快校版+IYUU Plus辅种全家桶
  • 阿里黄金回收白银回收铂金回收攻略,实地甄选五家优质实体店 - 诚金汇钻回收公司
  • 第【4】期--基于凸优化的无人机辅助的通信感知一体化系统波束成形方案研究-maltab完整代码+报告
  • 教育专研护眼灯:从教室到家庭的专业护眼新标准 - 资讯焦点
  • 终极iOS越狱指南:使用palera1n工具从入门到精通
  • 终极指南:如何用AutoHotkey实现Chrome浏览器自动化控制
  • 百色市黄金回收白银回收铂金回收攻略,实地甄选五家优质实体店 - 诚金汇钻回收公司
  • 降AI率黑科技!AI率92%暴降至5%!实测10款降AI率网站!10款工具深度解析!
  • 高效突破网盘限速:LinkSwift网盘直链下载助手深度配置指南
  • 海同科技/职坐标靠谱吗?深度拆解16年IT教育品牌真实实力 - 品牌测评鉴赏家
  • ARM TrustZone-M实战:在i.MX RT600上构建硬件级安全嵌入式系统
  • 5分钟彻底掌控电脑风扇:Windows平台终极风扇控制软件FanControl完全指南
  • 郑州本地人私藏的变美宝地!久匠纹眉,做完不用天天早起画眉啦 - 企业博客发布
  • 054、NPU的激活函数单元:硬件实现ReLU、Sigmoid查找表
  • 2026卷王:5大创意灯箱源头厂家横评实测 避坑指南 - 资讯焦点
  • 2026年广州学烤乳猪多少钱?最新收费及避坑指南全解析 - 品牌优选官