diff --git a/src/web/mod.rs b/src/web/mod.rs index c094eba70..5b9fe199e 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -170,21 +170,12 @@ impl CratesfyiHandler { router.get("/:crate/:version/", rustdoc::rustdoc_redirector_handler, "crate_version_"); - router.get("/:crate/:version/search-index.js", - rustdoc::rustdoc_html_server_handler, - "crate_version_search_index_js"); router.get("/:crate/:version/settings.html", rustdoc::rustdoc_html_server_handler, "crate_version_settings_html"); router.get("/:crate/:version/all.html", rustdoc::rustdoc_html_server_handler, "crate_version_all_html"); - router.get("/:crate/:version/aliases.js", - rustdoc::rustdoc_html_server_handler, - "crate_version_aliases_js"); - router.get("/:crate/:version/source-files.js", - rustdoc::rustdoc_html_server_handler, - "crate_version_source_files_js"); router.get("/:crate/:version/:target", rustdoc::rustdoc_redirector_handler, "crate_version_target"); diff --git a/src/web/rustdoc.rs b/src/web/rustdoc.rs index d9a3f2d87..5bba8387e 100644 --- a/src/web/rustdoc.rs +++ b/src/web/rustdoc.rs @@ -104,6 +104,15 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult { Ok(resp) } + // this unwrap is safe because iron urls are always able to use `path_segments` + // i'm using this instead of `req.url.path()` to avoid allocating the Vec, and also to avoid + // keeping the borrow alive into the return statement + if req.url.as_ref().path_segments().unwrap().last().map_or(false, |s| s.ends_with(".js")) { + // javascript files should be handled by the file server instead of erroneously + // redirecting to the crate root page + return rustdoc_html_server_handler(req); + } + let router = extension!(req, Router); // this handler should never called without crate pattern let crate_name = cexpect!(router.find("crate"));