visigine
This commit is contained in:
35
website/_devserver.py
Normal file
35
website/_devserver.py
Normal file
@@ -0,0 +1,35 @@
|
||||
"""Local dev server that mimics the production nginx try_files fallback.
|
||||
Serves real files when they exist; otherwise falls back to index.html so
|
||||
clean URLs like /kontakt and /ki-agenten work on reload. Dev-only helper.
|
||||
"""
|
||||
import os
|
||||
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
||||
|
||||
PORT = 8002
|
||||
|
||||
|
||||
class FallbackHandler(SimpleHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
raw = self.path.split("?")[0]
|
||||
fs = self.translate_path(self.path)
|
||||
# 1) real file → serve it
|
||||
if os.path.isfile(fs):
|
||||
return super().do_GET()
|
||||
# 2) try $uri.html (clean URLs like /ki-agenten-systeme → ki-agenten-systeme.html)
|
||||
html_rel = raw.rstrip("/") + ".html"
|
||||
if os.path.isfile(self.translate_path(html_rel)):
|
||||
self.path = html_rel
|
||||
return super().do_GET()
|
||||
# 3) directory with index.html → serve it
|
||||
if os.path.isdir(fs) and os.path.isfile(os.path.join(fs, "index.html")):
|
||||
return super().do_GET()
|
||||
# 4) extensionless route → SPA fallback to index.html
|
||||
if "." not in os.path.basename(raw):
|
||||
self.path = "/index.html"
|
||||
return super().do_GET()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||
print(f"Dev server with SPA fallback running on http://localhost:{PORT}")
|
||||
ThreadingHTTPServer(("", PORT), FallbackHandler).serve_forever()
|
||||
Reference in New Issue
Block a user