我正在尝试使用Perl Dancer Web框架提供robots.txt。我认为有一条只返回文本的路径会起作用,但它似乎将它包装在html
和body
标签中。我假设抓取工具不会将其解释为robots.txt文件。
知道如何正确地做到这一点吗?
以下是我编写路线的方法:
get '/robots.txt' => sub {
return "User-agent: *\nDisallow: /";
};
提前致谢!
答案 0 :(得分:12)
是什么让你认为它被包裹在HTML和BODY元素中?
use Dancer;
get '/robots.txt' => sub {
return "User-agent: *\nDisallow: /\n";
};
dance;
输出:
>lwp-request -e http://127.0.0.1:3000/robots.txt
200 OK
Server: Perl Dancer 1.3112
Content-Length: 26
Content-Type: text/html
Client-Date: Mon, 29 Apr 2013 05:05:32 GMT
Client-Peer: 127.0.0.1:3000
Client-Response-Num: 1
X-Powered-By: Perl Dancer 1.3112
User-agent: *
Disallow: /
我敢打赌,您正在使用一个使用渲染器的客户端查看它,该渲染器会在看到text/html
的Content-Type标头时添加这些渲染器。将内容类型设置为text/plain
会更合适,并且在用于查看文件的渲染器中看起来更好。
get '/robots.txt' => sub {
content_type 'text/plain';
return "User-agent: *\nDisallow: /\n";
};
但最终,它不应该产生任何影响。
答案 1 :(得分:6)
发送robots.txt
的另一个选项是不为其定义路由,而是将实际的robots.txt
文件放入您的public/
子目录中主要的舞者app目录。然后,Dancer会自动将其作为常规文件提供,而不会将其传递给路径处理程序,模板等。
答案 2 :(得分:3)
您正在以text/html
(默认值)提供回复。浏览器插入元素作为解析HTML的正常过程的一部分(您正在查看实时DOM的表示而不是源代码)。
设置正确的content-type标题。
get '/robots.txt' => sub {
content_type "text/plain";
return "User-agent: *\nDisallow: /";
};