From 9fcf4ee8e007527a565252d51c2544e433c50abc Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Mon, 17 Aug 2026 22:02:48 +0000 Subject: [PATCH] Stricter slug path processing, only serve site on 404 of missing article paths, not any other path. --- pagerite/app.py | 5 +++-- pagerite/views.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pagerite/app.py b/pagerite/app.py index d1306b4..f5b6e0e 100644 --- a/pagerite/app.py +++ b/pagerite/app.py @@ -563,8 +563,9 @@ async def show_page(request: Request, path: str) -> HTMLResponse | Response: """ path = path.strip("/") if path and _is_reserved(path): - # Reserved slug shape: never content — no tree lookup. - return HTMLResponse(views.render_not_found(data.menu, path, data.brand, data.custom_css, data.theme), 404) + # Invalid slug shape: not a content URL, let FastAPI return its + # built-in 404 instead of rendering an editable article page. + raise HTTPException(404) chain = resolve(data.menu, path) node = chain[-1] if chain else None if node is not None and node.published and node.content is not None: diff --git a/pagerite/views.py b/pagerite/views.py index 9e4a14d..aaf8d01 100644 --- a/pagerite/views.py +++ b/pagerite/views.py @@ -353,7 +353,7 @@ def render_not_found( doc = E.article with doc: doc.h1("Not Found") - doc.p(f"No page at /{path}.") + doc.p(f"No article at /{path}. If there was before, it may have been deleted.") scripts, styles = _page_assets(theme) return str( _layout(styles, scripts, custom_css, theme)(