From 4e8be724ac44ec64bacc4c6f19820addf4548e24 Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Wed, 28 Jan 2026 23:38:07 -0800 Subject: [PATCH] Handle domain name in share URL path Skip domain-like segments (containing dots) when parsing the share path. e.g., /share/slug/aol.com is treated as /share/slug /share/slug/aol.com/events is treated as /share/slug/events Co-Authored-By: Claude Opus 4.5 --- src/app/share/ShareProvider.tsx | 14 +++++++++++++- src/app/share/[slug]/[[...path]]/SharePage.tsx | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/app/share/ShareProvider.tsx b/src/app/share/ShareProvider.tsx index 9862a974..b83d3794 100644 --- a/src/app/share/ShareProvider.tsx +++ b/src/app/share/ShareProvider.tsx @@ -32,11 +32,23 @@ const ALL_SECTION_IDS = [ 'attribution', ]; +function getSharePath(pathname: string) { + const segments = pathname.split('/'); + const firstSegment = segments[3]; + + // If first segment looks like a domain name, skip it + if (firstSegment?.includes('.')) { + return segments[4]; + } + + return firstSegment; +} + export function ShareProvider({ slug, children }: { slug: string; children: ReactNode }) { const { share, isLoading, isFetching } = useShareTokenQuery(slug); const router = useRouter(); const pathname = usePathname(); - const path = pathname.split('/')[3]; + const path = getSharePath(pathname); const allowedSections = share?.parameters ? ALL_SECTION_IDS.filter(id => share.parameters[id] !== false) diff --git a/src/app/share/[slug]/[[...path]]/SharePage.tsx b/src/app/share/[slug]/[[...path]]/SharePage.tsx index 5d93fd96..d80bc3b1 100644 --- a/src/app/share/[slug]/[[...path]]/SharePage.tsx +++ b/src/app/share/[slug]/[[...path]]/SharePage.tsx @@ -39,11 +39,23 @@ const PAGE_COMPONENTS: Record attribution: AttributionPage, }; +function getSharePath(pathname: string) { + const segments = pathname.split('/'); + const firstSegment = segments[3]; + + // If first segment looks like a domain name, skip it + if (firstSegment?.includes('.')) { + return segments[4]; + } + + return firstSegment; +} + export function SharePage() { const share = useShare(); const { setTheme } = useTheme(); const pathname = usePathname(); - const path = pathname.split('/')[3]; + const path = getSharePath(pathname); const { websiteId, parameters = {} } = share; useEffect(() => {