robots.txt没有通过node.js路由显示发送纯文本

时间:2016-09-20 13:34:47

标签: node.js express nginx router robots.txt

这让我疯了......我在路由器定义中添加了一条路由来提供纯文本robots.txt文件。我不认为我在/robots.txt路由之前有一个catchall,因为其他路由到/ mobile和/ map按预期工作。在我的本地机器上,/ robots.txt工作正常。仅当部署到服务器时,此路由才起作用。

router.get('/', function (req, res) {
    res.render('index');
});

router.get('/mobile', function (req, res) {
    res.render('mobile');
});

router.get('/map', function (req, res) {
    res.render('map');
});

router.get('/robots.txt', function (req, res) {
    res.type('text/plain');
    res.send('User-agent: *');
});

这在我的本地计算机上运行良好,但在部署到http://geolytix.co.uk/robots.txt

时则不行
Error: Not Found
   at /usr/share/geolytix/app.js:28:13
   at Layer.handle [as handle_request] (/usr/share/geolytix/node_modules/express/lib/router/layer.js:95:5)
   at trim_prefix (/usr/share/geolytix/node_modules/express/lib/router/index.js:312:13)
   at /usr/share/geolytix/node_modules/express/lib/router/index.js:280:7
   at Function.process_params (/usr/share/geolytix/node_modules/express/lib/router/index.js:330:12)
   at next (/usr/share/geolytix/node_modules/express/lib/router/index.js:271:10)
   at /usr/share/geolytix/node_modules/express/lib/router/index.js:618:15
   at next (/usr/share/geolytix/node_modules/express/lib/router/index.js:256:14)
   at Function.handle (/usr/share/geolytix/node_modules/express/lib/router/index.js:176:3)
   at router (/usr/share/geolytix/node_modules/express/lib/router/index.js:46:12)

我最初的猜测是,这与从nginx到我的节点服务器的代理有关,但我可以通过直接转到IP地址来访问该站点。然而robots.txt路线失败了。

http://139.59.161.58:3000/robots.txt

编辑:

这是我app.js的第28行 enter image description here

2 个答案:

答案 0 :(得分:2)

在PM2中重启失败15次后,应用程序崩溃,缓存版本仍在提供。 robots.txt路由不在缓存中。我很抱歉浪费你的时间。至少我现在已经更好地理解了如何使用PM2。

d

答案 1 :(得分:0)

这是因为nginx配置设置为拦截静态文件请求

有些部分是这样的:

http {
    ...
    server {
        ...
        location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
            root /usr/local/.../public;
            access_log off;
            expires max;
        }
        ...
    }
}

甚至在它到达Express.js路由中间件之前就处理robots.txt

您应该从nginx配置中排除文件以允许路由处理它。