UrlMapping到Grails中的静态文件

时间:2013-07-31 14:37:08

标签: grails grails-2.0 url-mapping

我想映射位于我的web-app目录中的静态文件sitemap.xml和robots.txt。网址应如下:

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

如何设置网址映射以使这些路由有效?

3 个答案:

答案 0 :(得分:9)

最简单的方法是告诉grails在UrlMappings.groovy中忽略它们:

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

如果您正在使用nofollow,那么为您的Staging环境设置nofollow也可能会有所帮助。不确定是否有用例将登台站点编入索引....所以如果您同意,您可以使用这些步骤来帮助阻止它。

如果您使用的是Tomcat,请设置一个环境变量,例如 NOFOLLOW = true - &gt;请参阅此处:TOMCAT_OPTS, environment variable and System.getEnv()

接下来如@doelleri所述,设置了urlMappings

<强> UrlMappings

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

然后使用robotsController检测您在暂存tomcat上设置的环境变量。

<强> RobotsController

def robots() {
    if (System.getenv('NOFOLLOW') == 'true') {
        def text = "User-agent: *\n" +
            "Disallow: /cgi-bin/ \n" +
            "Disallow: /tmp/ \n" +
            "Disallow: /junk/ \n" +
            "Disallow: /admin/ \n" +
            "Crawl-delay: 5 \n" +
            "Sitemap: https://www.example.com/sitemap.xml"

        render(text: text, contentType: "text/plain", encoding: "UTF-8")
    } else {
        render(status: 404, text: 'Failed to load robots.txt')
    }
}

<强> robots.gsp

<%-- Content rendered from controller -> so leave blank :) --%>