以 / 结尾的路由模式

Edit This Page

Slim 处理带有斜线结尾的 URL 和不带斜线的 URL 的方式不同。意思就是 /user/user/ 不是一回事,它们可以有不同的回调。

如果你想通过重定向让所有以 / 结尾的 URL 和不以 / 结尾的 URL 相等,你可以添加这个中间件:

  1. use Psr\Http\Message\RequestInterface as Request;
  2. use Psr\Http\Message\ResponseInterface as Response;
  3. $app->add(function (Request $request, Response $response, callable $next) {
  4. $uri = $request->getUri();
  5. $path = $uri->getPath();
  6. if ($path != '/' && substr($path, -1) == '/') {
  7. // permanently redirect paths with a trailing slash
  8. // to their non-trailing counterpart
  9. $uri = $uri->withPath(substr($path, 0, -1));
  10. return $response->withRedirect((string)$uri, 301);
  11. }
  12. return $next($request, $response);
  13. });

或者,也可以使用 oscarotero/psr7-middlewares’ TrailingSlash 中间件强制为所有 URL 添加结尾的斜线:

  1. use Psr7Middlewares\Middleware\TrailingSlash;
  2. $app->add(new TrailingSlash(true)); // true 则添加结尾斜线 (false 移除斜线)