現在、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です)
もっと良い方法があるはずです。どうしますか?
ありがとうございました。
ミドルウェア機能を使用します。このようにして、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: /");
});
次のコンテンツでrobots.txt
を作成します。
User-agent: *
Disallow:
public/
ディレクトリに追加します。
robots.txt
はhttp://yoursite.com/robots.txt
でクローラーが利用できます
大丈夫な方法のように見えます。
別の方法として、編集できるようにしたい場合は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ではありません)
これは、インデックスルートで行ったことです。あなたは単に私が下に与えたものをあなたのコードに単に書き留めることができます。
router.get('/', (req, res) =>
res.sendFile(__dirname + '/public/sitemap.xml')
)
router.get('/', (req, res) => {
res.sendFile(__dirname + '/public/robots.txt')
})