*.example. 3600 TXT "Wild! You have found a wildcard."
当使用时,这个DNS记录将导致任何与通配符匹配的子域持有一个文本值。“Wild! You have found a wildcard.”
例如,如果在域名smashingmagazine.com上设置了这个,apples.example.smashingmagazine.com和oranges.example.smashingmagazine.com都将返回上述文本值。同样的原则也可以应用于CNAME和A记录。
用通配符构建
说了这么多,让我们来看看用这些域名进行建设。我们将重点讨论你可以获得通配符的三个地方。
1.Server Side In getServerSideProps,
2.Client Side With useEffect,
3.Server Side On API Routes and Edge Functions。 在getServerSideProps中的服务器端
这是最常见的需要提取通配符的情况,你可以在需要为不同通配符渲染完全不同内容的页面上使用。如上所述,这不能通过静态网站生成来完成,所以我们必须在服务器端渲染的页面上完成。
getServerSideProps被传递给一个上下文对象,在这个对象中你可以使用context.req访问HTTP请求对象。在这个请求对象中,你可以在headers.host处访问主机名,它将返回一个字符串,如example.yourdomain.com。我们可以把这个字符串分割成一个数组,跨越每个周期,然后访问所述数组中的第一个项目。在代码中,这看起来像这样:
default function App(props) {
switch(props.wildcard) {
case "home":
return <div>Welcome to the home page!</div>;
break;
default:
return <div>The wild card is: {props.wildcard}.</div>;
}
}
// useEffect and useState must be imported from 'react'
const [wildcard, setWildcard] = useState("")
useEffect(() => {
setWildcard(window.location.hostname.split(".")[0])
}, [])