robots.txt를 사용하여 하위 도메인 만 허용하지 않으려면 어떻게해야하나요?


10

내 코드베이스는 여러 환경 (라이브, 준비, 개발) 및 하위 도메인 (간에 공유 staging.example, dev.example등)와 두 크롤링하도록 허용 (예.해야 www.example하고 example). 일반적으로 수정 /robots.txt하고 추가 Disallow: /하지만 공유 코드 기반으로 인해 /robots.txt모든 (하위) 도메인에 영향을 미치지 않으면 수정할 수 없습니다 .

그것에 대해 어떻게 생각하십니까?

답변:


13

robots.txt사이트에 액세스 한 하위 도메인을 기반으로 다른 파일을 제공 할 수 있습니다. Apache에서이를 수행하는 한 가지 방법은 .htaccess에서 mod_rewrite를 사용하여 URL을 내부적으로 다시 작성하는 것입니다. 다음과 같은 것 :

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 "표준"에이를 제어 할 수있는 것은 아무것도 없습니다. 봇은 단순히 request sub.example.com/robots.txt하므로 하위 도메인에 따라 다른 응답을 제공하기 위해 무언가 를 수행 해야합니다 . mod_rewrite를 사용할 필요는 없지만 여러 번 사용한 기술입니다. 경우 robots.txt동적으로 생성됩니다 당신은 서버 측 코드 (예. PHP)에서 응답을 변경할 수 있습니다.
MrWhite

사용에 대한 대안 은 이러한 하위 도메인에 액세스 할 때 HTTP 응답 헤더 robots.txt를 전송하여 X-Robots-Tag: noindex(.htaccess에서도 수행 할 수 있음) 크롤링이 아닌 인덱싱을 방지하는 것 입니다. 크롤링을 방지하는 것이 바람직하다고 생각합니다. (?)
MrWhite

1

robots.txt 루트에있는 경우에만 작동합니다.

robots.txt에서 액세스 할 수있는 각 하위 도메인 웹 사이트마다 별도로 업로드해야합니다 http://subdomain.example.com/robots.txt.

에 아래 코드를 추가하십시오 robots.txt

User-agent: *
Disallow: /

또 다른 방법은 <META>모든 페이지에 로봇 태그를 삽입하는 것 입니다.

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

3
그러나 OP는 이미 "정상적으로 수정 /robots.txt하고 추가 Disallow: /하지만 공유 코드 기반으로 인해 /robots.txt모든 (하위) 도메인에 영향을 미치지 않으면 수정할 수 없습니다 "라고 말합니다.
MrWhite

0

html 페이지에서 메타 태그를 제거하고 하위 도메인에 따라 동적으로 빌드합니다. 예를 들어 하위 도메인 개발을 사용합니다. 개발을 위해. 따라서 pageload 이벤트에는 다음이 있습니다.

  ' 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.