내 모든 하위 도메인에 robots.txt를 제공하고 Apache의 다른 호스트에는 제공하지 않는 방법은 무엇입니까?

내 모든 하위 도메인에 robots.txt를 제공하고 Apache의 다른 호스트에는 제공하지 않는 방법은 무엇입니까?

우리는 웹사이트를 개발하고 프로덕션 환경과 동일한 서버에서 QA 환경을 호스팅합니다. 모든 QA 사이트에 특정 robots.txt를 제공하고 싶지만 프로덕션 사이트에는 제공하고 싶지 않습니다. 우리는많은수백 개의 가상 호스트 구성 블록을 업데이트하고 싶지 않습니다. QA 사이트는 도메인 이름과 해당 사이트가 있는 디렉터리에서 쉽게 식별할 수 있습니다. QA 사이트와 프로덕션 사이트는 서로 다른 두 디렉터리로 그룹화됩니다. 모든 QA 사이트는 *.qa.mycompany.com에서 호스팅됩니다.

프로덕션 예: 호스트: example.org docroot: /var/www/production/example.org

QA 예시: 호스트: example.qa.mycompany.com docroot: /var/www/qa/example.org

모든 QA vhost 구성을 업데이트하지 않고도 프로덕션 사이트가 아닌 모든 QA 사이트에 robots.txt를 제공하도록 Apache를 구성할 수 있는 방법이 있습니까?

답변1

이것을 추가할 수 있습니다.

<Directory "/var/www/qa/*">
  Redirect permanent robots.txt http://example.com/qa_robots.txt
</Directory>

qa-robots.txt를 글로벌 호스트의 공개 영역에 넣을 수 있는 것보다 디렉토리 블록은 모든 /qa/ 폴더에 대해 리디렉션되어야 합니다.

검색 엔진도 이 리디렉션을 따라야 합니다.

리디렉션 대신 추가할 수도 있습니다.

오류문서 404 "/var/www/qa_robots.txt"

하지만 이렇게 하면 404 오류 코드가 전송됩니다. 검색봇이 이에 대해 어떻게 반응하는지 잘 모르겠습니다. 내 생각에 이것을 할 수도 있는 방법이 있을 것 같아요mod_rewrite그리고 매칭RewriteCond

답변2

당신은 그것을 할 수 있습니다mod_alias&If 문, 이것을 서버 conf에 추가하십시오 :

Alias /robots.txt /path/to/robots.txt
Alias /qa_robots.txt /path/to/robots.txt

<If "%{DOCUMENT_ROOT} =~ /(\x2Fvar\x2Fwww\x2Fqa\x2F)/">
RewriteRule ^robots\.txt$  qa_robots.txt
</If>

If 문은 Apache 2.4에서만 사용할 수 있고 질문에 2.2 및 2.4로 태그를 지정했습니다. 따라서 Apache 2.2를 사용하는 경우 문제가 해결되지 않을 수 있습니다.

/if 문에서는 벗어날 수 없으므로 /다음으로 대체됩니다.x2F

테스트하지는 않았지만 이론적으로는 작동할 것입니다.

관련 정보