我试图创建规范的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}`
}
....
}
型
我在这里错过了什么?我在本地环境中得到了预期的完整路径。
1条答案
按热度按时间u1ehiz5o1#
看起来你如何构造规范URL可能有问题。在元数据函数中,你使用空格将基URL(https://example.com)与pathName组合在一起。相反,你应该使用正斜杠(/)将它们连接在一起。
字符串
通过将空格替换为正斜杠,您应该得到正确的规范URL,组合基URL和pathName。这假设pathName已经包含前导斜杠,如果它不是空字符串。如果不是,您可能需要调整构造pathName的逻辑。