diff --git a/man/html.in b/man/html.in
index b7e79841d0..23b77ebbb0 100755
--- a/man/html.in
+++ b/man/html.in
@@ -11,5 +11,14 @@ ninja -C "@BUILD_ROOT@" version.h
target="man/$1.html"
ninja -C "@BUILD_ROOT@" "$target"
+
+fullname="@BUILD_ROOT@/$target"
+redirect="$(readlink "$fullname" 2>/dev/null)"
+if [ -n "$redirect" ]; then
+ ninja -C "@BUILD_ROOT@" "man/$redirect"
+
+ fullname="@BUILD_ROOT@/man/$redirect"
+fi
+
set -x
-exec xdg-open "@BUILD_ROOT@/$target"
+exec xdg-open "$fullname"
diff --git a/man/man.in b/man/man.in
index fa6164b8de..12eb332ee0 100755
--- a/man/man.in
+++ b/man/man.in
@@ -16,4 +16,13 @@ if [ -z "$target" ]; then
exit 1
fi
ninja -C "@BUILD_ROOT@" "$target"
-exec man "@BUILD_ROOT@/$target"
+
+fullname="@BUILD_ROOT@/$target"
+redirect="$(sed -n -r '1 s|^\.so man[0-9]/(.*)|\1|p' "$fullname")"
+if [ -n "$redirect" ]; then
+ ninja -C "@BUILD_ROOT@" "man/$redirect"
+
+ fullname="@BUILD_ROOT@/man/$redirect"
+fi
+
+exec man "$fullname"