Генерим robost.txt: заменить [text/html] на [text/plain]

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
tolyan
Сообщения: 61
Зарегистрирован: 2012.05.19, 02:29

Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение tolyan »

Проект поддерживает мультисайтинг: несколько доменных имен припаркованных к одному каталогу с yii проектом. Таким образом robots.txt надо генерить на лету, так как выложить его статичным файлом нет возможности. Делаю так:

Код: Выделить всё

  public function actionRobots()
  {
    $host = Yii::app()->request->hostInfo;
    $host = preg_replace("/w+\./", '', $host);
    $host = str_replace("http://", "", $host);
    $this->renderPartial('robots', array(
      'host' => $host,
      'sitemap' => "http://$host/sitemap.xml",
    ));
  }
и вьюха:

Код: Выделить всё

User-Agent: * 
Allow: /
Host: <?php echo "$host\n"; ?>
Sitemap: <?php echo "$sitemap\n"; ?>
и до кучи правило в CUrlManager:

Код: Выделить всё

'robots.txt' => 'sitemap/default/robots',
Это все прекрасно, но есть одно Но: http://site/robots.txt открытый в браузере не содержит переносов строк. Все в одну строчку. Делаю в консоли wget этого урла и вижу в его выводе:

Код: Выделить всё

Длина: нет данных [text/html]
хотя если вгетить статичный файл robots.txt, то в выводе вгет видим:

Код: Выделить всё

Длина: нет данных [text/plain]
Каким образом поменять text/html на text/plain? Да и надо ли это делать? Съедят ли поисковики роботс.тхт полученный с text/plain?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение anton44eg »

header("Content-Type: text/plain");
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение kosenka »

У меня тоже мультисайт и я сделал по другому отдачу статичного robots.txt

1) в DefaultController'e:

Код: Выделить всё

        public function actionRobotsTxt()
        {
                $host=str_replace("www.","",$_SERVER['HTTP_HOST']);//заменяем "www" в адресе на "пустое"
                $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.$host.'-robots.txt';//ищем файл /protected/config/ХОСТ.robots.txt
                if(file_exists($robotsTxt))// файл найден
                {
                        $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                }
                else// файл не найден
                {
                        $file="";
                        $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.'robots.txt';//ищем файл /protected/config/robots.txt
                        if(file_exists($robotsTxt))// файл найден
                        {
                                $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                        }
                }
                header('Content-Type: text/plain');
                echo $file;
        }
 
2) в urlrules.php добавляем правило:
'robots.txt' => array('site/robotsTxt', 'urlSuffix'=>''), //если вдруг в конфиге выставили urlSuffix, то мы его чистим

и все.
tolyan
Сообщения: 61
Зарегистрирован: 2012.05.19, 02:29

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение tolyan »

Код: Выделить всё

header('Content-Type: text/plain');
исправило ситуацию. Не знал, что есть такая штука =)
Спасибо за инфу!

PS: kosenka, не соображу, в чем преимущества вашего метода? Получать содежимое статичного файла, подменять в нем значения и в акшне выдавать на запрос. Не проще роботс.тхт во вьюху, как у меня?
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение kosenka »

tolyan писал(а):

Код: Выделить всё

header('Content-Type: text/plain');
исправило ситуацию. Не знал, что есть такая штука =)
Спасибо за инфу!

PS: kosenka, не соображу, в чем преимущества вашего метода? Получать содежимое статичного файла, подменять в нем значения и в акшне выдавать на запрос. Не проще роботс.тхт во вьюху, как у меня?
А зачем что-то в robots.txt подменять?
У меня их много (для каждого сайта свой robots.txt):
/protected/config/site1.ru-robots.txt
/protected/config/site2.ru-robots.txt
и т.д.

И зачем во view его передавать? Не проще ли/быстрее просто "отдать" файл?
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение lancecoder »

kosenka писал(а):У меня тоже мультисайт и я сделал по другому отдачу статичного robots.txt

1) в DefaultController'e:

Код: Выделить всё

        public function actionRobotsTxt()
        {
                $host=str_replace("www.","",$_SERVER['HTTP_HOST']);//заменяем "www" в адресе на "пустое"
                $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.$host.'-robots.txt';//ищем файл /protected/config/ХОСТ.robots.txt
                if(file_exists($robotsTxt))// файл найден
                {
                        $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                }
                else// файл не найден
                {
                        $file="";
                        $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.'robots.txt';//ищем файл /protected/config/robots.txt
                        if(file_exists($robotsTxt))// файл найден
                        {
                                $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                        }
                }
                header('Content-Type: text/plain');
                echo $file;
        }
2) в urlrules.php добавляем правило:
'robots.txt' => array('site/robotsTxt', 'urlSuffix'=>''), //если вдруг в конфиге выставили urlSuffix, то мы его чистим

и все.
$_SERVER['HTTP_HOST']="http://www.rawww.ru"; //частный случай (понимаю что редкость, но все же)
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Генерим robost.txt: заменить [text/html] на [text/plain]

Сообщение kosenka »

lancecoder писал(а):
kosenka писал(а):У меня тоже мультисайт и я сделал по другому отдачу статичного robots.txt

1) в DefaultController'e:

Код: Выделить всё

        public function actionRobotsTxt()
        {
                $host=str_replace("www.","",$_SERVER['HTTP_HOST']);//заменяем "www" в адресе на "пустое"
                $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.$host.'-robots.txt';//ищем файл /protected/config/ХОСТ.robots.txt
                if(file_exists($robotsTxt))// файл найден
                {
                        $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                }
                else// файл не найден
                {
                        $file="";
                        $robotsTxt=Yii::getPathOfAlias('webroot.protected.config').DIRECTORY_SEPARATOR.'robots.txt';//ищем файл /protected/config/robots.txt
                        if(file_exists($robotsTxt))// файл найден
                        {
                                $file = file_get_contents($robotsTxt, true);//получаем его содержимое
                        }
                }
                header('Content-Type: text/plain');
                echo $file;
        }
 
2) в urlrules.php добавляем правило:
'robots.txt' => array('site/robotsTxt', 'urlSuffix'=>''), //если вдруг в конфиге выставили urlSuffix, то мы его чистим

и все.
$_SERVER['HTTP_HOST']="http://www.rawww.ru"; //частный случай (понимаю что редкость, но все же)
Да, не учел.
Спасибо за подсказку, поправлю.
Ответить