10

出于某种原因,我想通过 PHP 脚本提供我的 robots.txt。我已经设置了 apache,以便 robots.txt 文件请求(实际上是所有文件请求)来自一个 PHP 脚本。

我用来渲染 robots.txt 的代码是:

echo "User-agent: wget\n";
echo "Disallow: /\n";

但是,它不处理换行符。如何正确地服务器 robots.txt,以便搜索引擎(或任何客户端)正确地看到它?我是否必须为 txt 文件发送一些特殊的标题?

编辑1:

现在我有以下代码:

header("Content-Type: text/plain");
echo "User-agent: wget\n";
echo "Disallow: /\n";

仍然不显示换行符(参见http://sarcastic-quotes.com/robots.txt)。

编辑2:

有人提到它很好,没有显示在浏览器中。只是好奇这个如何正确显示:http ://en.wikipedia.org/robots.txt

编辑 3:

我通过 wget 下载了我的和维基百科的,看到这个:

$ file en.wikipedia.org/robots.txt
en.wikipedia.org/robots.txt: UTF-8 Unicode English text

$ file sarcastic-quotes.com/robots.txt
sarcastic-quotes.com/robots.txt: ASCII text

最后总结:

主要问题是我没有设置标题。但是,还有另一个内部错误,就是将 Content-Type 设置为 html。(这是因为我的请求实际上是通过内部代理提供的,但那是另一个问题)。

一些浏览器不显示换行符的评论只正确了一半-> 如果内容类型为 text/plain,现代浏览器会正确显示换行符。我正在选择与实际问题密切匹配的答案,并且没有上述稍微误导性的误解:)。感谢大家的帮助和您的时间!

谢谢

J.P

4

6 回答 6

27

是的,您忘记将输出的内容类型设置为text/plain

header("Content-Type: text/plain");

您的输出可能以 HTML 格式发送,其中换行符被截断为空格,并且要实际显示换行符,您需要该<br />标记。

于 2010-12-22T06:22:27.477 回答
4
  1. header('Content-Type: text/plain')是正确的。
  2. 在将任何内容(包括空格)写入输出之前,您必须调用此方法。在打开之前检查空格<?php
  3. 如果您的Content-Type标头已设置为text/plain,则没有哪个浏览器会折叠空白。这种行为是 HTML 和类似格式所独有的。
  4. 我相信你有你的理由,但通常,通过 PHP 提供静态内容会使用不必要的服务器资源。对 PHP 的每一次攻击通常都会产生一个新进程和几兆内存。您可以使用 apache 配置指令根据头文件指向不同的机器人文件,例如User-Agent- 我会调查的。
  5. 搜索引擎很可能会忽略Content-Type标题,所以这应该不是问题。

希望这可以帮助。

-n

于 2010-12-22T08:29:13.707 回答
1
<?php header("Content-Type: text/plain"); ?>
User-agent: wget
Disallow: /

顺便说一句,换行符就在那里。它们只是没有显示在浏览器中。浏览器将所有空格(包括换行符)折叠成一个空格。

deceze$ curl http://sarcastic-quotes.com/robots.txt
User-agent: wget
Disallow: /
于 2010-12-22T06:24:06.983 回答
0

您必须设置所服务文档的内容类型。对于 .txt 文本文件:

header("Content-Type: text/plain");

IANA 拥有一些更流行的 MIME(内容)类型的信息。

于 2010-12-22T06:22:36.783 回答
0

我遇到了类似的问题,“\n”或 PHP_EOL 都有效。我终于用了:

header('Content-Disposition: attachment; filename="plaintext.txt"');
header("Content-Type: text/plain");
echo "some data";
echo chr(13).chr(10);

两个角色的回声都起到了作用。希望它可以帮助某人。

再见阿南金

于 2015-01-23T20:34:30.833 回答
-1

如果您使用 echo,则使用<br>换行符。printf 函数使用\n。

在您的情况下,请使用 printf 因为您没有使用 HTML。我相信这是正确的方法,同时将 MIME 类型设置为文本。

于 2010-12-22T06:23:26.450 回答