2013-07-31 51 views
6

Chcę zmapować pliki statyczne sitemap.xml i robots.txt, które znajdują się w moim katalogu aplikacji internetowych. Adresy URL powinny wyglądać następująco:UrlMapping do plików statycznych w Grails

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

Jak ustawić mapowanie adresów URL, aby te trasy działały?

Odpowiedz

7

Używam tego mapowania dla robots.txt:

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

A potem mają grails-app/views/robots.gsp zawierający treść robots.txt. W ten sposób mogę użyć <g:if env="...">, aby łatwo mieć inną zawartość dla różnych środowisk.

Aby to działało dla rozszerzenia ".xml", należy zmienić konfigurację Content Negotiation.

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

Dzięki. Działa dla robotów, ale nie dla sitemap.xml jak by to zrobić? – confile

+0

Dlaczego to nie działa? – doelleri

+0

"/sitemap.xml" (widok: "/ sitemap") nie działa. – confile

8

Najprościej jest powiedzieć Grails ignorować je w UrlMappings.groovy:

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

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

Ta odpowiedź dokładniej przedstawia to, co wnioskował PO, chociaż wybrana odpowiedź zapewnia działające alternatywne podejście. – mnd

0

To może również być pomocne założyć nofollow do środowiska Staging jeśli używasz jednego. Nie jestem pewien, czy jest to przypadek użycia indeksowanej witryny pomostowej .... więc jeśli się zgodzisz, możesz skorzystać z tych kroków, aby zablokować to.

Jeśli używasz Tomcat, ustawić zmienną środowiskową, takich jak NOFOLLOW = true -> patrz tutaj na przykład: TOMCAT_OPTS, environment variable and System.getEnv()

Dalej jak wspomniano przez @doelleri ustawić urlMappings

UrlMappings

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

Następnie za pomocą robotsController wykryć Środ Zmienna onmentowa ustawiona na twoim tomie tymczasowym.

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:/