以 / 结尾的路由模式

最后更新于:2022-04-01 22:34:06

# 以 / 结尾的路由模式 [Edit This Page](https://github.com/slimphp/Slim-Website/tree/gh-pages/docs/cookbook/route-patterns.md) Slim 处理带有斜线结尾的 URL 和不带斜线的 URL 的方式不同。意思就是 `/user` 和 `/user/` 不是一回事,它们可以有不同的回调。 如果你想通过重定向让所有以 `/` 结尾的 URL 和不以 `/` 结尾的 URL 相等,你可以添加这个中间件: ``` use Psr\Http\Message\RequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; $app->add(function (Request $request, Response $response, callable $next) { $uri = $request->getUri(); $path = $uri->getPath(); if ($path != '/' && substr($path, -1) == '/') { // permanently redirect paths with a trailing slash // to their non-trailing counterpart $uri = $uri->withPath(substr($path, 0, -1)); return $response->withRedirect((string)$uri, 301); } return $next($request, $response); }); ``` 或者,也可以使用 [oscarotero/psr7-middlewares’ TrailingSlash](//github.com/oscarotero/psr7-middlewares#trailingslash) 中间件强制为所有 URL 添加结尾的斜线: ``` use Psr7Middlewares\Middleware\TrailingSlash; $app->add(new TrailingSlash(true)); // true 则添加结尾斜线 (false 移除斜线) ```
';