Slim Framework V2.6.3如何定义匹配特定前缀的单一路由?
在Slim Framework V2.6.3中捕获特定开头的路由
完全可以实现,Slim V2支持用正则表达式定义路由,刚好能满足你捕获所有以apple-touch-icon开头路径的需求。
实现方法
直接定义带正则匹配的路由,让它匹配所有符合前缀规则的请求路径:
<?php require 'vendor/autoload.php'; $app = new Slim\Slim(); // 匹配所有以/apple-touch-icon开头的路径 $app->get('/apple-touch-icon.*', function () use ($app) { // 获取当前请求的完整路径 $requestPath = $app->request->getPath(); // 这里写你的处理逻辑,比如返回对应的图标文件 $app->response->setStatus(200); $app->response->setHeader('Content-Type', 'image/png'); // 假设图标文件存放在public目录下,读取并输出 $filePath = realpath(__DIR__ . '/public' . $requestPath); if ($filePath && file_exists($filePath)) { readfile($filePath); } else { $app->response->setStatus(404); echo 'Icon not found'; } }); $app->run();
更精确的匹配(可选)
如果只想匹配.png后缀的图标路径,可以把路由规则改成更严格的正则:
$app->get('/apple-touch-icon(?:-.+)?\.png', function () use ($app) { // 处理逻辑同上 });
这个规则会精准匹配你给出的所有例子:
/apple-touch-icon.png/apple-touch-icon-precomposed.png/apple-touch-icon-57x57.png
注意事项
Slim V2的路由按定义顺序匹配,如果你还有其他更具体的路由(比如单独某个图标路径的特殊处理),要把这个通用路由放在那些具体路由的后面,避免提前匹配导致具体路由失效。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

