По какой-то причине я хочу обслуживать свой robots.txt с помощью PHP-скрипта. У меня настроен apache, так что запрос файла robots.txt (infact all file requests) приходит к одному скрипту PHP.
Код, который я использую для рендеринга robots.txt, это:
echo "User-agent: wget\n"; echo "Disallow: /\n";
Однако он не обрабатывает новые строки. Как правильно загрузить файл robots.txt, чтобы поисковые системы (или любой клиент) видели его правильно? Должен ли я отправлять специальные заголовки для txt-файлов?
Теперь у меня есть следующий код:
header("Content-Type: text/plain"); echo "User-agent: wget\n"; echo "Disallow: /\n";
который по-прежнему не отображает символы новой строки (см. http://sarcastic-quotes.com/robots.txt ).
Некоторые люди отметили, что это просто отлично и не отображаются в браузере. Было просто любопытно, как это выглядит правильно: http://en.wikipedia.org/robots.txt
Я загрузил как мою, так и википедию через 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. (это потому, что мой запрос фактически обслуживается через внутренний прокси, но это еще одна проблема).
Некоторые комментарии о том, что браузеры не отображают новую строку, были только наполовину правильными -> современные браузеры корректно отображают новую строку, если тип содержимого является текстовым / открытым. Я выбираю ответ, который точно соответствовал реальной проблеме и был лишен вышеупомянутого слегка вводящего в заблуждение заблуждения :). Спасибо всем за помощь и ваше время!
благодаря
JP
Да, вы забыли установить тип содержимого вашего вывода в text/plain
:
header("Content-Type: text/plain");
Ваш вывод, вероятно, отправляется как HTML, где новая строка усечена в пространство и фактически отображает новую строку, вам нужен тег <br />
.
header('Content-Type: text/plain')
правильный. <?php
. Content-Type
был установлен в text/plain
, ни один браузер в своем уме не разрушил бы пробелы. Это поведение исключительно для HTML и подобных форматов. User-Agent
– я бы это изучил. Content-Type
, поэтому в любом случае это не должно быть проблемой. Надеюсь это поможет.
-n
<?php header("Content-Type: text/plain"); ?> User-agent: wget Disallow: /
Кстати, новые строки там просто прекрасные. Они просто не отображаются в браузере . Браузеры сворачивают все пробелы, включая новые строки, в одно пространство.
deceze$ curl http://sarcastic-quotes.com/robots.txt User-agent: wget Disallow: /
Вы должны установить тип содержимого документа, который вы обслуживаете. В текстовом файле .txt:
header("Content-Type: text/plain");
IANA имеет информацию о некоторых наиболее популярных типах MIME (контент) .
У меня была аналогичная проблема, и работал либо «\ n», либо PHP_EOL. Я, наконец, использовал:
header('Content-Disposition: attachment; filename="plaintext.txt"'); header("Content-Type: text/plain"); echo "some data"; echo chr(13).chr(10);
Эхо BOTH персонажей получило трюк. Надеюсь, это поможет кому-то.
Bye anankin
Если вы используете эхо, используйте для новых строк. функция printf использует \ n.
В вашем случае используйте printf, потому что вы не используете HTML. Я считаю, что это правильный способ сделать это, а также настроить тип MIME на текст.