diff --git a/clash_lib/src/app/api/mod.rs b/clash_lib/src/app/api/mod.rs index a516eadb..db396c85 100644 --- a/clash_lib/src/app/api/mod.rs +++ b/clash_lib/src/app/api/mod.rs @@ -1,3 +1,4 @@ +use std::path::PathBuf; use std::{net::SocketAddr, sync::Arc}; use axum::{response::Redirect, routing::get, Router}; @@ -39,6 +40,7 @@ pub fn get_api_runner( statistics_manager: Arc, cache_store: ThreadSafeCacheFile, router: ThreadSafeRouter, + cwd: String, ) -> Option { if let Some(bind_addr) = controller_cfg.external_controller { let app_state = Arc::new(AppState { @@ -92,7 +94,7 @@ pub fn get_api_runner( if let Some(external_ui) = controller_cfg.external_ui { app = app .route("/ui", get(|| async { Redirect::to("/ui/") })) - .nest_service("/ui/", ServeDir::new(external_ui)); + .nest_service("/ui/", ServeDir::new(PathBuf::from(cwd).join(external_ui))); } axum::Server::bind(&addr) diff --git a/clash_lib/src/lib.rs b/clash_lib/src/lib.rs index 9d02072f..b8cadefb 100644 --- a/clash_lib/src/lib.rs +++ b/clash_lib/src/lib.rs @@ -20,7 +20,6 @@ use config::def::LogLevel; use proxy::tun::get_tun_runner; use state::Storage; use std::io; -use std::path::PathBuf; use tokio::task::JoinHandle; use std::sync::Arc; @@ -246,6 +245,7 @@ async fn start_async(opts: Options) -> Result<(), Error> { statistics_manager, cache_store, router, + cwd.to_string_lossy().to_string(), ); if let Some(r) = api_runner { runners.push(r);