2013-07-31 76 views
6

我想映射位於我的web-app目錄中的靜態文件sitemap.xml和robots.txt。網址應該如下:UrlMapping到Grails中的靜態文件

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

我該如何設置url映射使這些路由起作用?

回答

7

我用這個映射robots.txt

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

,然後有一個grails-app/views/robots.gsp,其中包含robots.txt內容。這樣我可以使用<g:if env="...">輕鬆地爲不同的環境提供不同的內容。

爲了使其適用於「.xml」擴展名,您需要更改Content Negotiation配置。

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

感謝。它適用於機器人,但不適用於sitemap.xml,你會怎麼做? – confile

+0

它爲什麼不起作用? – doelleri

+0

「/sitemap.xml」(view:「/ sitemap」)不起作用。 – confile

8

最簡單的方法就是告訴Grails的忽略它們在UrlMappings.groovy

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

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

該答案更準確地表示OP請求的內容,雖然所選答案提供了一種工作替代方法。 – mnd

0

它也可能會有所幫助的nofollow的設置爲你的暫存環境,如果您正在使用一個。不知道這些是否是一個使用登錄站點索引的用例....所以如果您同意,您可以使用這些步驟來幫助阻止該問題。

如果正在使用Tomcat,設置一個環境變量如NOFOLLOW =真 - >在這裏看到例如:TOMCAT_OPTS, environment variable and System.getEnv()

接着通過@doelleri提到設置的urlMappings

UrlMappings

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

然後使用你的robotsController來檢測envir在您的暫存tomcat上設置的啓動變量。

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