2013-07-31 25 views
6

Desidero mappare i file statici sitemap.xml e robots.txt che si trovano nella directory della mia web-app. Gli URL devono essere i seguenti:UrlMappatura a file statici in Grails

http://www.mydomain.com/sitemap.xml 
http://www.mydomain.com/robots.txt 

Come devo impostare la mappatura URL per far funzionare questi percorsi?

risposta

7

utilizzare questa mappatura per robots.txt:

"/robots.txt" (view: "/robots") 

E poi hanno un grails-app/views/robots.gsp che contiene il contenuto per robots.txt. In questo modo posso usare <g:if env="..."> per avere facilmente contenuti diversi per ambienti diversi.

Per fare in modo che funzioni per un'estensione ".xml", è necessario modificare la configurazione Content Negotiation.

grails.mime.file.extensions = false // disables the parsing of file extensions from URLs into the request format 
+0

Grazie. Funziona con i robot, ma non con sitemap.xml come faresti? – confile

+0

Perché non funziona? – doelleri

+0

"/sitemap.xml" (visualizza: "/ sitemap") non funziona. – confile

8

Il modo più semplice è quello di dire a graal di ignorarli in UrlMappings.groovy:

class UrlMappings { 
    static excludes = ['/robots.txt', '/sitemap.xml'] 

    static mappings = { 
     // normal mappings here ... 
    } 
} 
+0

Questa risposta rappresenta in modo più accurato l'OP richiesto, sebbene la risposta selezionata fornisca un approccio alternativo funzionante. – mnd

0

Potrebbe anche essere utile per impostare un nofollow al vostro ambiente di staging, se si utilizza uno. Non sono sicuro se c'è un caso d'uso per avere un sito di staging indicizzato .... quindi se sei d'accordo potresti essere in grado di usare questi passaggi per aiutare a bloccarlo.

Se si utilizza Tomcat, impostare una variabile di ambiente come NOFOLLOW = true -> vedi qui, per esempio: TOMCAT_OPTS, environment variable and System.getEnv()

Prossimo come detto da @doelleri impostare i urlMappings

urlMappings

//Robots.txt 
"/robots.txt"(controller: 'robots', action:'robots') 

quindi utilizzare il robotsController per rilevare l'envir variabile onmentale impostata sul tomcat di staging.

RobotsController

def robots() { 
    if (System.getenv('NOFOLLOW') == 'true') { 
     render(view: 'robots') 
    } else { 
     render(status: 404, text: 'Failed to load robots.txt') 
    } 
} 

robots.gsp

<%@ page contentType="text/plain;charset=UTF-8" %>User-agent: * 
Disallow:/