2014-05-10 7 views
2

나는 enf에 특정한 robots.txt 파일을 가지고있는 Symfony2 방법이 궁금합니다. robots.txt 파일이 웹 (루트) 디렉토리에있는 경우 모든 env에서 동일합니다. 이 작업을 수행하는 유일한 방법은 웹 디렉터리에서 파일을 제거하고 env 특정 라우팅 파일을 사용하여 로봇 파일의 경로를 정의하고 컨트롤러에서 파일을 retvrieve하는 함수를 만드는 것입니다.Symfony2 env specific robots.txt

그래서 env 특정 robots.txt 파일을보다 "멋진"방법으로 사용하는 Symfony2 방법이 있습니다.

감사합니다. 최고 감사합니다, Georgi.

acme_robots: 
    path: /robots.txt 
    defaults: 
     _controller: FrameworkBundle:Template:template 
     template: AcmeBundle:Static:robots_%kernel.environment%.txt.twig 

답변

4

당신은 환경에 따라 나뭇 가지 파일을 렌더링 할 FrameworkBundle:Template:template 컨트롤러를 사용할 수 있습니다. Robots.txt는 Content-type: text/html과 함께 반환됩니다.

robots.txtContent-type: text/plain으로 반환하려면 다음 작업을 수행해야합니다.

routing.yml :

app_robots: 
    pattern: /robots.txt 
    defaults: 
     _controller: AppBundle:Static:robots 
     # template: AppBundle:Static:robots_%kernel.environment%.txt.twig 

src/AppBundle/Controller/StaticController.php :

<?php 

namespace AppBundle\Controller; 

use Symfony\Component\HttpFoundation\Response; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

/** 
* StaticController controller. 
*/ 
class StaticController extends Controller 
{ 
    /** 
    * Displays robots.txt. 
    */ 
    public function robotsAction($template = null) 
    { 
     $response = new Response(); 
     $response->headers->set('Content-Type', 'text/plain'); 

     return $this->render($template ?: sprintf(
      "AppBundle:Static:robots_%s.txt.twig", 
      $this->container->getParameter('kernel.environment') 
     ), array(), $response); 
    } 
} 

AppBundle/Resources/views/Static/robots_prod.txt.twig :

# Production robots.txt 

User-agent: * 
Allow:/

AppBundle/Resources/views/Static/robots_staging.txt.twig :

# Staging robots.txt 

User-agent: * 
Disallow:/
+0

원래 web/robots.txt 파일을 지워서 심포니 라우팅을 제어 할 수 있습니다. –

+0

'defaults '에'_format : txt'를''text/plain'으로 제공하기 위해' text/html'. – ACJ

0

이전 대답은 꽤 좋은,하지만 한 가지 문제가 있습니다 라우팅 YML 파일에서

:

0

RobotsBundle은 구성 변수를 통해 테스트/dev 환경의 색인 생성을 방지합니다. 단순히 config_test.yml/config_dev.yml이 추가 : 그런 다음 모든 응답에 X-Robots-Tag: none HTTP header을 추가합니다

four_labs_robots: 
    block_all: true 

.