Javascript 基于客户端主机名NextJS动态生成robot.txt和sitemap.xml
我有一个非常独特的要求; 我们需要动态生成两个文件,使用两种不同的内容类型(xml和txt)为robots.txt和sitemap.xml服务 这里需要注意的是,这两个文件都必须从根目录提供,并且应该动态提供,因为我们需要检查应用程序的主机名,并根据主机名呈现这两个文件 示例不同的主机可以有不同的站点地图;因此,需要从服务器获取站点地图,并将它们相应地呈现给客户端Javascript 基于客户端主机名NextJS动态生成robot.txt和sitemap.xml,javascript,node.js,reactjs,next.js,sitemap,Javascript,Node.js,Reactjs,Next.js,Sitemap,我有一个非常独特的要求; 我们需要动态生成两个文件,使用两种不同的内容类型(xml和txt)为robots.txt和sitemap.xml服务 这里需要注意的是,这两个文件都必须从根目录提供,并且应该动态提供,因为我们需要检查应用程序的主机名,并根据主机名呈现这两个文件 示例不同的主机可以有不同的站点地图;因此,需要从服务器获取站点地图,并将它们相应地呈现给客户端 class Sitemap extends React.Component { static async getInitialPr
class Sitemap extends React.Component {
static async getInitialProps({ res }) {
if(res) {
const hostName= res.headers.host;
console.log(`request_source ${hostName}`);
// do some other works and get data and render this accordingly
if (isSubDomain(hostName)) {
// just for testing I have hardcoded this
const textFile = () => {
return `User-agent: *
Disallow: /`;
};
res.setHeader("Content-Type", "text/plain;charset=UTF-8");
res.write(textFile());
res.end();
} else {
const textFile = () => {
return `User-agent: *
Disallow:`;
};
res.setHeader("Content-Type", "text/plain;charset=UTF-8");
res.write(textFile());
res.end();
}
}
}} export default Sitemap;
我使用getInitialProps方法实现了这一点,但不幸的是主机名没有被访问,因为这段代码是在服务器端构建的,而不是在客户端
class Sitemap extends React.Component {
static async getInitialProps({ res }) {
if(res) {
const hostName= res.headers.host;
console.log(`request_source ${hostName}`);
// do some other works and get data and render this accordingly
if (isSubDomain(hostName)) {
// just for testing I have hardcoded this
const textFile = () => {
return `User-agent: *
Disallow: /`;
};
res.setHeader("Content-Type", "text/plain;charset=UTF-8");
res.write(textFile());
res.end();
} else {
const textFile = () => {
return `User-agent: *
Disallow:`;
};
res.setHeader("Content-Type", "text/plain;charset=UTF-8");
res.write(textFile());
res.end();
}
}
}} export default Sitemap;