Как я могу использовать robots.txt, чтобы запретить только поддомен?


10

Моя база кода распределяется между несколькими средами (живой, постановка, Dev) и суб-доменов ( staging.example, dev.exampleи т.д.) , и только два должны быть разрешены для сканирования (то есть. , www.exampleА example). Обычно я изменяю /robots.txtи добавляю Disallow: /, но из-за общей базы кода я не могу изменить, /robots.txtне затрагивая все (под) домены.

Есть идеи, как это сделать?

Ответы:


13

Вы можете предоставить другой robots.txtфайл в зависимости от субдомена, через который был получен доступ к сайту. Одним из способов сделать это на Apache является внутренняя перезапись URL с использованием mod_rewrite в .htaccess. Что-то вроде:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^robots\.txt$ robots-disallow.txt [L]

Выше указано, что для всех запросов, robots.txtгде хост является чем-то отличным от www.example.comили example.com, затем внутренне переписать запрос robots-disallow.txt. И robots-disallow.txtтогда будет содержать Disallow: /директиву.

Если у вас есть другие директивы в вашем файле .htaccess, то эта директива должна быть ближе к вершине, перед любыми директивами маршрутизации.


Я думал о том же решении. Я не был уверен, есть ли что-то еще там, но в конце дня, если это так, то это то, что сделает мою работу выполненной)
alexus

1
Если оба субдомена / хоста указывают на одно и то же основание веб-пространства / кода, то в «стандарте» robots.txt нет ничего, что могло бы это контролировать, если это то, что вы предлагаете. Бот просто собирается запросить sub.example.com/robots.txt, поэтому вам нужно будет что- то сделать, чтобы обслуживать разные ответы в зависимости от субдомена. Вам не нужно использовать mod_rewrite, но эту технику я видел несколько раз. Если robots.txtгенерируется динамически, вы можете изменить ответ в коде на стороне сервера (например, PHP).
MrWhite

Альтернативой использованию robots.txtможет быть предотвращение индексации, а не обхода, путем отправки X-Robots-Tag: noindexзаголовка ответа HTTP при обращении к таким поддоменам (что также можно сделать в .htaccess). Хотя я думаю, что предотвращение ползания, вероятно, предпочтительнее. (?)
MrWhite

1

robots.txt работает только если он присутствует в корне.

Вам необходимо загрузить отдельный сайт robots.txtдля каждого поддоменов, откуда он будет доступен http://subdomain.example.com/robots.txt.

Добавьте код ниже в robots.txt

User-agent: *
Disallow: /

И еще один способ - вы можете вставить <META>тег Robots на все страницы.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">

3
Но ОП уже заявляет: «Обычно я изменяю /robots.txtи добавляю Disallow: /, но из-за общей базы кода я не могу изменить, /robots.txtне затрагивая все (под) домены».
MrWhite

0

Я бы удалил метатег со страницы html и динамически создал его в зависимости от вашего субдомена. Например, мы используем поддомен dev. для разработки. Итак, в событии подкачки у нас есть это:

  ' Check if domain is DEV or PROD and set robots accordingly meta tag in head
  Dim metatag As HtmlMeta = New HtmlMeta
  metatag.Attributes.Add("name", "robots")
  If CurrentURL.Contains("dev.advertise-it") Then
    metatag.Attributes.Add("content", "NOINDEX, NOFOLLOW")
  Else
    metatag.Attributes.Add("content", "INDEX, FOLLOW")
  End If
  Page.Header.Controls.Add(metatag)

Хотя это не мешает сканированию , что может показаться требованием для OP.
MrWhite
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.