通过PHP渲染纯文本

9 php text robots.txt header plaintext

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

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

echo "User-agent: wget\n";
echo "Disallow: /\n";
Run Code Online (Sandbox Code Playgroud)

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

编辑1:

现在我有以下代码:

header("Content-Type: text/plain");
echo "User-agent: wget\n";
echo "Disallow: /\n";
Run Code Online (Sandbox Code Playgroud)

它仍然不显示换行符(请参阅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
Run Code Online (Sandbox Code Playgroud)

最终摘要:

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

浏览器不显示换行符的一些注释只是半正确的 - >如果content-type是text/plain,现代浏览器会正确显示换行符.我选择的答案与真正的问题非常匹配,并且没有上述略有误导性的误解:).谢谢大家的帮助和时间!

谢谢

J.P

Rab*_*ire 24

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

header("Content-Type: text/plain");
Run Code Online (Sandbox Code Playgroud)

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


Nei*_*son 5

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

希望这可以帮助。

-n