Nextjs Middleware用于处理Netlify SSR中的规范URL

w1e3prcc  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(96)

我试图创建规范的URL为我的网页使用下一个元数据在RootLayout layout.js文件。
这就是我的middleware.js的样子

import { NextResponse } from 'next/server'
export function middleware(request) {
  const requestHeaders = new Headers(request.headers)
  const { pathname } = request.nextUrl

  requestHeaders.set('x-url', request.url || '')
  requestHeaders.set('x-invoke-path', pathname || '')

  return NextResponse.next({
    request: {
      headers: requestHeaders
    }
  })
}

字符串
在layout.js文件中,我试图获取规范URL,如下所示

...
import { headers } from 'next/headers'
...

export const metadata = () => {
  const headersList = headers()
  const pathName =
     headersList.get('x-url') || headersList.get('x-invoke-path') || ''
  return {
    ...
     alternates: {
      canonical: `https://example.com ${pathName}`
    }
    ....
  }


我在这里错过了什么?我在本地环境中得到了预期的完整路径。

u1ehiz5o

u1ehiz5o1#

看起来你如何构造规范URL可能有问题。在元数据函数中,你使用空格将基URL(https://example.com)与pathName组合在一起。相反,你应该使用正斜杠(/)将它们连接在一起。

import { headers } from 'next/headers';

export const metadata = () => {
  const headersList = headers();
  const pathName =
    headersList.get('x-url') || headersList.get('x-invoke-path') || '';
  
  return {
    ...
    alternates: {
      canonical: `https://example.com${pathName}`
    },
    ...
  };
};

字符串
通过将空格替换为正斜杠,您应该得到正确的规范URL,组合基URL和pathName。这假设pathName已经包含前导斜杠,如果它不是空字符串。如果不是,您可能需要调整构造pathName的逻辑。

相关问题