如何使用 React 和 Firebase 托管在 SPA 上提供 robots.txt 服务?

How can I serve robots.txt on an SPA using React with Firebase hosting?

我有一个使用 create-react-app 构建的 SPA,并希望有一个像这样的 robots.txt:

http://example.com/robots.txt

我在 this page 上看到:

You need to make sure your server is configured to catch any URL after it's configured to serve from a directory.

但是对于 firebase 托管,我不确定该怎么做。

在我的 /public 目录中,我创建了一个 robots.txt

在我的 /src 目录中,我执行了以下操作:

我创建了 /src/index.js:

import React from 'react'
import ReactDOM from 'react-dom'
import {TopApp} from './TopApp'
import registerServiceWorker from './registerServiceWorker'

import {BrowserRouter} from 'react-router-dom'

ReactDOM.render(
  <BrowserRouter>
    <TopApp/>
  </BrowserRouter>,
  document.getElementById('react-render-root')
)

registerServiceWorker()

我创建了 /src/TopApp.js:

import React from 'react'

import {
  Switch,
  Route
} from 'react-router-dom'

import {ComingSoon} from './ComingSoon'
import {App} from './App'

export class TopApp extends React.Component {
  render() {
    return (
      <div className="TopApp">
        <Switch>
          <Route path='/MyStuff' component={App}/>
          <Route exact path='/' component={ComingSoon}/>
        </Switch>
      </div>
    )
  }
}

因为路径 /robots.txt 未包含在提供的路由器路径中,所以它从我的 public 目录中获取并按需要发布了机器人文件。

sitemap.xml也可以这样做。

只需将以下规则添加到 firebase.json

中的 "rewrites" 部分
"rewrites": [
      {
        "source": "/robots.txt",
        "destination": "/robots.txt"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
]