在nextjs服务器端显示页面

问题描述 投票:0回答:1

我正在使用 Next.JS 14,如果请求来自浏览器但不是来自浏览器重定向到另一个网站,我想向客户端显示一个页面。 基于此代码部分,我已经完成了重定向部分,但没有任何用于显示页面的文档。 如果您能帮助我了解如何显示该页面,我将不胜感激。 谢谢。

// for GET method 
export async function GET(request) {
    const headersList = headers();
    if(!headersList.get("Accept").includes("text/html")) {
        return NextResponse.redirect("https://example.com");
    }
    
    return Page(); //LAYOUT
}
javascript next.js nextjs14
1个回答
0
投票

通过检查Header,我们可以确认请求是否来自浏览器

const headersList = headers()
  
  // get relevant headers
  const userAgent = headersList.get('user-agent')?.toLowerCase() || ''
  const acceptHeader = headersList.get('Accept') || ''
  const secFetchMode = headersList.get('Sec-Fetch-Mode')
  const secFetchSite = headersList.get('Sec-Fetch-Site')
  
  // browser detection logic
  const isBrowser = 
    // check if it's a common browser user-agent
    (userAgent.includes('mozilla/') || userAgent.includes('chrome/') || 
     userAgent.includes('safari/') || userAgent.includes('edge/') ||
     userAgent.includes('firefox/')) &&
    // modern browsers send these security headers
    secFetchMode === 'navigate' &&
    // should be from same-origin or none (direct navigation)
    (secFetchSite === 'same-origin' || secFetchSite === 'none') &&
    // Should accept HTML
    acceptHeader.includes('text/html')

  // if not a browser, redirect
  if (!isBrowser) {
    return NextResponse.redirect('https://abcxyz.com.io')
  }
© www.soinside.com 2019 - 2024. All rights reserved.