You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13 App目录服务端组件如何获取当前URL?

在Next.js 13 App目录服务端组件中获取完整URL

在App目录的服务端组件中,无法使用next/router,也没有getServerSideProps,但可以通过**next/headers提供的headers()函数**从请求头中提取信息来拼接完整URL,具体实现如下:

核心实现代码

先导入headers函数,再从请求头中解析协议、域名、端口等信息:

import { headers } from 'next/headers';

export default async function myPage() {
  const headersList = headers();
  // 获取包含域名和端口的host(如www.myserver.com:3000)
  const host = headersList.get('host');
  // 优先用反向代理传递的真实协议,本地开发或无代理时根据环境判断
  const protocol = headersList.get('x-forwarded-proto') || (process.env.NODE_ENV === 'production' ? 'https' : 'http');
  
  // 拆分域名与端口
  const [domain, port] = host.split(':');
  
  // 拼接包含路径和查询参数的完整URL
  const fullNextUrl = headersList.get('next-url') || '';
  const [pathname, searchParams] = fullNextUrl.split('?');
  const fullUrl = `${protocol}://${host}${pathname}${searchParams ? `?${searchParams}` : ''}`;

  return (
    <div>
      <p>协议: {protocol}</p>
      <p>域名: {domain}</p>
      <p>端口: {port || (protocol === 'https' ? '443' : '80')}</p>
      <p>完整URL: {fullUrl}</p>
    </div>
  );
}

关键说明

  • host请求头:直接返回域名加端口,本地开发时是localhost:3000,生产环境若有自定义端口也会一并返回。
  • 协议判断:部署在Vercel、Nginx这类反向代理环境时,x-forwarded-proto会传递用户实际访问的协议;本地开发直接用http即可。
  • 路径与查询参数:next-url是Next.js内部传递的请求头,包含当前页面的完整路径和查询参数。

客户端组件补充(若需切换)

如果要在客户端组件中获取URL,需先添加'use client'指令,再使用next/navigation的API:

'use client';
import { usePathname, useSearchParams } from 'next/navigation';

export default function ClientComponent() {
  const pathname = usePathname();
  const searchParams = useSearchParams();
  const protocol = window.location.protocol;
  const domain = window.location.hostname;
  const port = window.location.port;
  const fullUrl = `${protocol}//${domain}${port ? `:${port}` : ''}${pathname}${searchParams.toString() ? `?${searchParams.toString()}` : ''}`;

  return <p>客户端完整URL: {fullUrl}</p>;
}

内容的提问来源于stack exchange,提问作者NL3294

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:27