web-dev-qa-db-ja.com

Expressでrobots.txtを処理する最も賢い方法は何ですか?

現在、Express(Node.js)で構築されたアプリケーションに取り組んでおり、さまざまな環境(開発、生産)でさまざまなrobots.txtを処理する最も賢い方法を知りたいと思っています。

これは私が今持っているものですが、私は解決策に納得していない、私はそれが汚れていると思う:

app.get '/robots.txt', (req, res) ->
  res.set 'Content-Type', 'text/plain'
  if app.settings.env == 'production'
    res.send 'User-agent: *\nDisallow: /signin\nDisallow: /signup\nDisallow: /signout\nSitemap: /sitemap.xml'
  else
    res.send 'User-agent: *\nDisallow: /'

(注:CoffeeScriptです)

もっと良い方法があるはずです。どうしますか?

ありがとうございました。

58
Vinch

ミドルウェア機能を使用します。このようにして、robots.txtはセッション、cookieParserなどの前に処理されます。

app.use('/robots.txt', function (req, res, next) {
    res.type('text/plain')
    res.send("User-agent: *\nDisallow: /");
});

エクスプレス4 app.getは、表示される順序で処理されるようになったため、そのまま使用できます。

app.get('/robots.txt', function (req, res) {
    res.type('text/plain');
    res.send("User-agent: *\nDisallow: /");
});
91
SystemParadox
  1. 次のコンテンツでrobots.txtを作成します。

    User-agent: *
    Disallow:
    
  2. public/ディレクトリに追加します。

robots.txthttp://yoursite.com/robots.txtでクローラーが利用できます

8
atul

大丈夫な方法のように見えます。

別の方法として、編集できるようにしたい場合はrobots.txtを通常のファイルとして使用し、場合によってはプロダクションモードまたは開発モードでのみ必要な他のファイルがある場合は、2つの個別のディレクトリを使用し、起動時にどちらか一方をアクティブにします。

if (app.settings.env === 'production') {
  app.use(express['static'](__dirname + '/production'));
} else {
  app.use(express['static'](__dirname + '/development'));
}

次に、robots.txtの各バージョンで2つのディレクトリを追加します。

PROJECT DIR
    development
        robots.txt  <-- dev version
    production
        robots.txt  <-- more permissive prod version

また、どちらのディレクトリにもファイルを追加し続けて、コードをよりシンプルに保つことができます。

(申し訳ありませんが、これはjavascriptであり、coffeescriptではありません)

2

これは、インデックスルートで行ったことです。あなたは単に私が下に与えたものをあなたのコードに単に書き留めることができます。

router.get('/', (req, res) =>
    res.sendFile(__dirname + '/public/sitemap.xml')
)

router.get('/', (req, res) => {
    res.sendFile(__dirname + '/public/robots.txt')
})
0
Chan Myae Maung