fix: use sentinel query param for OG redirect to preserve /a/:naddr paths

- Change OG HTML redirect to use ?_spa=1 query param instead of redirecting to /
- Simplify vercel.json rewrites: serve SPA when _spa=1, otherwise serve OG HTML
- Remove brittle user-agent detection patterns
- Add cleanup effect to strip _spa param from URL after SPA loads
- Fixes refresh redirect regression while maintaining OG preview support
This commit is contained in:
Gigi
2025-11-07 23:11:41 +01:00
parent 63a820faf8
commit 5a5cfb7edd
3 changed files with 16 additions and 12 deletions

View File

@@ -60,7 +60,7 @@ ${articleTags}
</head>
<body>
<noscript>
<p>Redirecting to <a href="/">Boris</a>...</p>
<p>Redirecting to <a href="/a/${naddr}">Boris</a>...</p>
</noscript>
<script>
(function(){
@@ -69,7 +69,8 @@ ${articleTags}
if (window.location.pathname !== p) {
history.replaceState(null, '', p);
}
window.location.replace('/');
var sep = window.location.search ? '&' : '?';
window.location.replace(p + sep + '_spa=1');
} catch (e) {}
})();
</script>

View File

@@ -755,6 +755,16 @@ function App() {
}
}, [showToast])
// Strip _spa query parameter from URL after SPA loads
useEffect(() => {
const url = new URL(window.location.href)
if (url.searchParams.has('_spa')) {
url.searchParams.delete('_spa')
const path = url.pathname + (url.search ? url.search : '') + url.hash
window.history.replaceState(null, '', path)
}
}, [])
if (!eventStore || !accountManager || !relayPool) {
return (
<div className="loading">

View File

@@ -11,21 +11,14 @@
"rewrites": [
{
"source": "/a/:naddr",
"destination": "/api/article-og?naddr=:naddr",
"destination": "/index.html",
"has": [
{ "type": "query", "key": "og", "value": "1" }
{ "type": "query", "key": "_spa", "value": "1" }
]
},
{
"source": "/a/:naddr",
"destination": "/api/article-og?naddr=:naddr",
"has": [
{
"type": "header",
"key": "user-agent",
"value": ".*(bot|Bot|BOT|crawler|Crawler|CRAWLER|spider|Spider|facebookexternalhit|Slackbot|Twitterbot|LinkedInBot|WhatsApp|TelegramBot|Discordbot|Googlebot|bingbot|YandexBot|Baiduspider).*"
}
]
"destination": "/api/article-og?naddr=:naddr"
},
{
"source": "/(.*)",