Htaccess robots txt to robots php

Настройка robots.txt для разных хостов

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

Например, для сайтов site.ru и sub.site.ru корневая директория /home/www/site.ru (где и лежит их общий robots.txt).

Вводные данные

Домен основного сайта: site.ru

Подоомены: kazan.site.ru, spb.site.ru, krasnodar.site.ru

  • Проксирование статики на сервере происходит на стороне apache
  • Проксирование статики на сервере происходит на стороне nginx

Наша задача сделать так, чтобы для основного домена и поддоменов отдавался разный файл robots.txt

Для начала мы создадим два файла robots.txt для основного домена и robots-subdomains.txt для поддоменов.

Проксирование статики на apache

В случае, проксирование статики происходит на стороне apache все просто — добавляем в .htaccess строки:

RewriteCond % ^subdomain.site.ru$ RewriteRule ^robots.txt$ /robots-subdomains.txt [L]

и создаем файл, например, robots-subdomains.txt — robots для поддоменов.

Проксирование статики на nginx

В случае проксирования статики на nginx задача слегка усложняется. Файл robots.txt будет отдаваться nginx’ом и поэтому до правил в .htaccess дело не дойдёт. Для того, чтобы иметь возможность перенаправить запросы к файлу robots.txt, нам надо, чтобы его отдавал apache. Для этого мы переименуем файл robots.txt в main-robots.txt. В этом случае, не найдя файл robots.txt в корне сайта, nginx передаст запрос на apache, который обработает перенаправления в .htaccess.

В итоге у нас должно получиться два файла: main-robots.txt для основного домена и robots-subdomains.txt для поддоменов. В .htaccess надо вписать следующие строки:

RewriteCond % ^site.ru$ RewriteRule ^robots.txt$ /robots-main.txt [L] RewriteCond % ^subdomain.site.ru$ RewriteRule ^robots.txt$ /robots-subdomains.txt [L]

Источник

Настройка robots.txt через php файл для поддоменов

Если на проекте присутствует несколько поддоменов, то рано или поздно вы столкнетесь с вопросом разных файлов robots.txt для каждого из них. Но что делать, если htaccess отказывается менять файл для каждого условия?

Как добавить поддоменам разные robots.txt при помощи PHP в файле htaccess?

Что из себя представляет данный файл? Как правило, его структура выглядит так:

User-Agent: * Disallow: *?* Disallow: /video/ Sitemap: http://site.ru/sitemap.xml

Основная причина, почему в статье речь пойдет про PHP:
1. вам не придется создавать для каждого поддомена свой личный файл robots.txt (это плюс, если таких поддоменов больше 3, например, региональные)
2. на некоторых площадках, htaccess должным образом не обрабатывает правила замены

О каких правилах замены идет речь? Ну, предположим:

RewriteCond % ^site.ru$ RewriteRule ^robots.txt$ /robots-main.txt [L] RewriteCond % ^subdomain.site.ru$ RewriteRule ^robots.txt$ /robots-subdomains.txt [L]

А теперь Решение:
Т.к. работаю с битриксом, то в моем случае этот блок настоек выглядит так:

 Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^robots.txt$ robots_for_domain.php [L] . 

RewriteRule ^robots.txt$ robots_for_domain.php [L]

User-Agent: * Disallow: *?* Disallow: /video/ Disallow: /news/ ?> Sitemap: http:///sitemap.xml Host: http://

Обратите внимание, для всех поддоменов, добавили проверку, если это не основной сайт (site.ru), то дописываем Disallow:

Вот таким нехитрым образом, мы подключили обработку всех robots.txt на один файл.
У этого метода есть только один, на мой взгляд, существенный минус – если вам нужны уникальные строки для одного из поддоменов, то вам необходимо будет при помощи проверок, свич-кэйсов и прочих методов добавить это в php файл.

Но это уже, как говорится, совсем другая история 🙂 .

Если на Вашем проекте необходимо добавить выбор города или региона с переходом на поддомен, обращайтесь ко мне.

Источник

Замена robots txt для поддоменов в htaccess

Добрый день. Пытаюсь сделать персональные файлы Robots.txt для поддоменов. Вариант чтобы по адресу https://subdomain1.site.ru/robots.txt отдавалось содержимое другого файла https://subdomain1.site.ru/robots-subdomain1.txt не получается. примеры того что пробывал — это с три десятка подобных конструкций из рунета и нетолько. Надеюсь на помощь. Спасибо.

RewriteCond % ^([a-zA-Z\-]+).site\-example\.com$ [NC]
RewriteRule ^robots.txt robots-%1.txt [L]
RewriteCond % ^app.website.com$
RewriteRule ^robots\.txt$ robots-subdomain.txt
//код на php
$domain = $_SERVER['HTTP_HOST'];
?>
User-agent: Yandex
Host: https://
Sitemap: https:///sitemap.xml
RewriteRule ^robots.txt$ robots.php

Спасибо за пояснения. Буду разбираться. все равно сделаю

//код на php 
$domain = $_SERVER['HTTP_HOST'];
?>
User-agent: Yandex
Host: https://
Sitemap: https:///sitemap.xml
RewriteRule ^robots.txt$ robots.php

Мне тоже этот метод понравился, просто почему то не редиректит с robots txt на Роботс php Возможно причина в других редиректах, они то работают всегда. А с файликом и так и так пробывал, и на отдельные персональные файлы отправлять, и на автоматом создавать ничего.

RewriteEngine On 
RewriteBase /

RewriteRule ^photo/$ /gallery/ [R=301,L]

RewriteEngine On

RewriteCond % ^www.site.ru$ [NC]
RewriteCond % !^/robots.* # этот блок позволяет существовать robots txt по двум адресам, www.site.ru/robots.txt и просто site.ru/robots.txt ?
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

RewriteCond % !-f
RewriteCond % !\..$
RewriteCond % !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]

mazafaka5, вам надо развести в том числе и роботс основного домена, потому что в нек. случаях наличие этого файла в корне будет делать все ваши попытки как-то использовать .htaccess абсолютно бессмысленными.

Корень является базой по умолчанию, но в общем автор написанного прав. А почему не хотите использовать самый естественный вариант, т.е. развести поддомены по отдельным сайтам/каталогам?

Х.З., текстовый контент-тайп лучше выдавать. В $_SERVER[‘HTTP_HOST’] может передаваться и корневой домен – сделайте хотя бы «трим точки справа». Точки в маске нужно экранировать (robots\.txt).

вот так точно будет выдавать содержимое robots.php при запросе robots.txt, только эти записи в файле .htaccess:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ robots.php

miketomlin:
mazafaka5, вам надо развести в том числе и роботс основного домена, потому что в нек. случаях наличие этого файла в корне будет делать все ваши попытки как-то использовать .htaccess абсолютно бессмысленными.

Корень является базой по умолчанию, но в общем автор написанного прав.

А почему не хотите использовать самый естественный вариант, т.е. развести поддомены по отдельным сайтам/каталогам?

Я попроще хотел бы конечное, но modx cms + webhost1 — на отдельную папку c поддомена нельзя направиться, нет будет подсайт работать.

miketomlin:
mazafaka5, вам надо развести в том числе и роботс основного домена, потому что в нек. ———- Добавлено 06.10.2017 в 12:28 ———-

Копипастил. Не понимая. И все еще плохо понимаю, буду тщательней вникать позже седня.

Х.З., текстовый контент-тайп лучше выдавать. В $_SERVER[‘HTTP_HOST’] может передаваться и корневой домен – сделайте хотя бы «трим точки справа». Точки в маске нужно экранировать (robots\.txt).

Подарите пожалуйтса пример строк кода, я понял но правильно сделать первый раз трудно

Х.З.:
вот так точно будет выдавать содержимое robots.php при запросе robots.txt, только эти записи в файле .htaccess:

RewriteEngine on 
RewriteBase /
RewriteRule ^robots.txt$ robots.php
# MODX supports Friendly URLs via this .htaccess file. You must serve web 
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODX.
# E.g., "/modx" if your installation is in a "modx" subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ robots.php
User-agent: * 
Disallow:

User-agent: Yandex
Host: https://site.ru

Sitemap: https://site.ru/sitemap.xml
User-agent: Yandex Host: https://site.ru Sitemap: https://site.ru/sitemap.xml

mazafaka5:
Копипастил. Не понимая. И все еще плохо понимаю, буду тщательней вникать позже седня.

Наверно генерить роботс тут все же не лучший вариант, тем более что я нигде не увидел, что файлы должны быть однотипными, подпадающими под опред. шаблон. В любом случае тут тоже применимо мое самое первое замечание. При наличии статик роботса в корне вся эта баланда может не работать. Делайте не только для поддоменов, но и для осн. домена.

P.S. Рерайт делается примерно так (выписывать реальный код лень, сорри): Условие «есть файл с именем, зависящим от имени хоста» Правило «делаем рерайт в этот файл»

Простите за то отвлекаю) но что-то не идет дело. Редиректа нет, удалял для теста robots.txt из корня, и пробывал следующие конструкции в htaccess :

RewriteCond % ^site.ru$ 
RewriteRule ^robots.txt$ /robots-main.txt [L]
RewriteCond % ^subdomain.site.ru$
RewriteRule ^robots.txt$ /robots-subdomains.txt [L]
RewriteCond % ^subdomain.site.ru$ 
RewriteRule ^robots.txt$ /robots-subdomains.txt [L]
RewriteEngine on 

RewriteCond % ^subdomain.site.ru [NC]
RewriteRule ^robots\.txt /robots_chelyabinsk.txt [NC,L,R=301]
RewriteBase / 

RewriteCond % chelyabinsk\.site\.ru/.*robots\.txt$
Rewriterule ^robots.txt$ robots_chelyabinsk.txt [R=301,NC,L]

Источник

Один robots.txt на несколько доменов

robots.txt для несколько сайтов

Недавно по работе столкнулся с довольно рутинной и нудной задачей – выполнение ТЗ для СЕО-оптимизации сайта. Кто сталкивался с подобными задачами, наверняка, сейчас сморщили гримасу неприязни и физическую боль во всем теле. Да, СЕОшники знают толк в извращениях. Но статья не про продвижение сайтов и не про веселых ребят оптимизаторов, а про один из пунктов ТЗ, который внес немного разнообразия в рабочий процесс и скрасил трудовой час. В одной из задач ТЗ, была поставлена цель, сделать различное содержание файла robots.txt для разных доменов. Домены в свою очередь припаркованы к одному серверу и используют одни и те же файлы. То есть нужно реализовать вывод разной информации при обращении к одному и тому же файлу. Задачка мне показалась интересная и вот, про нее статья.

Разделение robots.txt для каждого домена

Очевидно, что для разного отображения robots.txt , при просмотре с разных доменов, необходимо как-то программно проверять, по какому адресу открыт файл, и выдавать нужный текст. Но как это сделать, если файл текстовый? Можно написать php код прямо в файле и настроить на сервере, чтобы apahce выполнял код, написанный в файлах с расширением txt, я как-то писал подобную статью: как заставить работать php код на html-странице. Но, одно дело, когда код выполняется в html-файлах, и совсем другое, если на сервере будут выполняться текстовые файлы. Это не самая лучшая идея с точки зрения безопасности. Поэтому было решено воспользоваться другим способом – прописать, все для того же apahce, редирект на php-скрипт, при обращении к robots.txt.
Сам редирект можно прописать в файле .htaccess следующим образом:

RewriteEngine On RewriteRule ^robots.txt robots.php [L]

Теперь при обращении к сайту по адресу http://site1.ru/robots.txt, на самом деле вызываться будет скрипт robots.php, хотя в адресной строке это ни как не отобразится. Главное, сам файл robots.txt переименовать или перенести, чтобы он не мешал редиректу.
И теперь все, что осталось, это написать простой php-код определения хоста для подстановки соответствующего содержимого robots.txt. А также нужно не забыть выдать заголовки, в которых будет указан тип данных, чтобы полностью имитировать текстовый файл.
Вот такой тестовый код получился:

// указываем в заголовках, что это текст header('Content-type: text/plain'); // проверяем, какой открыт сайт // и выводим нужный текст robots.txt if($_SERVER['HTTP_HOST'] == "site1.ru")< echo "User-agent: * \nSitemap: site1.ru/sitemap-1.xml"; >else < echo "User-agent: * \nSitemap: site2.ru/sitemap-2.xml"; >

Послесловие

Если эту статью читают СЕО-оптимизаторы, то обращаюсь к вам, ребята. Как вы считаете, такой редирект между файлами, при обращении к robots.txt, будет адекватно воспринят поисковыми системами? Если нет, то возможно у вас есть другие идеи и предложения. Буду признателен, присланным мне на почту письмам или ответам в комментариях.

Источник

Читайте также:  METANIT.COM
Оцените статью