aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/args.rs8
-rw-r--r--src/config.rs8
-rw-r--r--src/main.rs24
3 files changed, 39 insertions, 1 deletions
diff --git a/src/args.rs b/src/args.rs
index f7b42f1..590ac14 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -41,6 +41,14 @@ pub struct CliArgs {
#[arg(long, requires = "index", env = "MINISERVE_SPA")]
pub spa: bool,
+ /// Activate Pretty URLs mode
+ ///
+ /// This will cause the server to serve the equivalent `.html` file indicated by the path.
+ ///
+ /// `/about` will try to find `about.html` and serve it.
+ #[arg(long, env = "MINISERVE_PRETTY_URLS")]
+ pub pretty_urls: bool,
+
/// Port to use
#[arg(
short = 'p',
diff --git a/src/config.rs b/src/config.rs
index 8976d35..2df9fdd 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -80,6 +80,13 @@ pub struct MiniserveConfig {
/// allow the SPA router to handle the request instead.
pub spa: bool,
+ /// Activate Pretty URLs mode
+ ///
+ /// This will cause the server to serve the equivalent `.html` file indicated by the path.
+ ///
+ /// `/about` will try to find `about.html` and serve it.
+ pub pretty_urls: bool,
+
/// Enable QR code display
pub show_qrcode: bool,
@@ -250,6 +257,7 @@ impl MiniserveConfig {
default_color_scheme_dark,
index: args.index,
spa: args.spa,
+ pretty_urls: args.pretty_urls,
overwrite_files: args.overwrite_files,
show_qrcode: args.qrcode,
mkdir_enabled: args.mkdir_enabled,
diff --git a/src/main.rs b/src/main.rs
index 851f9ab..43878db 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,7 +5,9 @@ use std::time::Duration;
use actix_files::NamedFile;
use actix_web::{
- http::header::ContentType, middleware, web, App, HttpRequest, HttpResponse, Responder,
+ dev::{fn_service, ServiceRequest, ServiceResponse},
+ http::header::ContentType,
+ middleware, web, App, HttpRequest, HttpResponse, Responder,
};
use actix_web_httpauth::middleware::HttpAuthentication;
use anyhow::Result;
@@ -316,6 +318,26 @@ fn configure_app(app: &mut web::ServiceConfig, conf: &MiniserveConfig) {
}
}
+ if conf.pretty_urls {
+ log::info!("Pretty URLs enabled.");
+ files = files.default_handler(fn_service(|req: ServiceRequest| async {
+ let (req, _) = req.into_parts();
+ let conf = req
+ .app_data::<MiniserveConfig>()
+ .expect("Could not get miniserve config");
+ let mut path_base = req.path()[1..].to_string();
+ if path_base.ends_with('/') {
+ path_base.pop();
+ }
+ if !path_base.ends_with("html") {
+ path_base = format!("{}.html", path_base);
+ }
+ let file = NamedFile::open_async(conf.path.join(path_base)).await?;
+ let res = file.into_response(&req);
+ Ok(ServiceResponse::new(req, res))
+ }));
+ }
+
if conf.show_hidden {
files = files.use_hidden_files();
}