diff --git a/htdocs/.htaccess b/htdocs/.htaccess
index f947f764bec58cd524023443dc6236c0664b52ae..09db3f3eb093ee7abc15d8b361842a973d223413 100644
--- a/htdocs/.htaccess
+++ b/htdocs/.htaccess
@@ -1,4 +1,5 @@
 Options +ExecCGI
+AddHandler cgi-script .py
 <FilesMatch "^-$">
   SetHandler cgi-script
 </FilesMatch>
diff --git a/htdocs/visualizer.py b/htdocs/visualizer.py
new file mode 100755
index 0000000000000000000000000000000000000000..fa63eed72a52fb96ed6a5e4e5c538cfeb30dabc8
--- /dev/null
+++ b/htdocs/visualizer.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+"""Redirect to the new CGI script name, "-"."""
+
+import os
+from pathlib import PurePosixPath
+
+request_script = PurePosixPath(os.getenv('SCRIPT_NAME'))
+request_uri = PurePosixPath(os.getenv('REQUEST_URI'))
+relative = request_uri.relative_to(request_script)
+target_script = request_script.with_name('-')
+target = target_script / relative
+
+print('Status: 308 Permanent Redirect')
+print(f'Location: {target}')
+print()