You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axum启用路由规范化时根路由/无法重定向

问题分析

你遇到的核心问题是:启用NormalizePathLayer并以外层包裹Router的方式配置时,根路径/的重定向逻辑无法触发,请求直接进入404 fallback。这是因为该层的包裹顺序干扰了Axum路由对根路径的匹配逻辑。

解决方案

调整NormalizePathLayer的添加方式,将其通过Router::layer()方法集成到路由栈中,而非外层包裹整个Router。

修改后的完整代码:

use axum::{
    http::{header::HeaderMap, StatusCode},
    response::{IntoResponse, Redirect},
    routing::get,
    Router, ServiceExt,
};
use std::net::SocketAddr;
use tower_http::normalize_path::NormalizePathLayer;

#[tokio::main]
async fn main() {
    let addr = SocketAddr::from(([127, 0, 0, 1], 9090));
    axum::Server::bind(&addr)
        .serve(
            Router::new()
                .route("/", get(redirect))
                .fallback(handler_404)
                .layer(NormalizePathLayer::trim_trailing_slash())
                .into_make_service(),
        )
        .await
        .unwrap();
}

async fn redirect(_headers: HeaderMap) -> Redirect {
    Redirect::temporary("/404")
}

async fn handler_404() -> impl IntoResponse {
    (StatusCode::NOT_FOUND, "nothing to see here")
}

补充说明

  1. 调整后的配置中,NormalizePathLayer会在请求进入路由匹配前完成路径规范化,同时保证根路径/的路由规则能正确匹配并触发重定向逻辑。
  2. 你的Cargo.toml中存在无效依赖use = "0.0.0",建议移除该条目以避免编译警告。

内容的提问来源于stack exchange,提问作者Axum500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:36:05