我想映射位于我的web-app目录中的静态文件sitemap.xml和robots.txt。网址应如下:
http://www.mydomain.com/sitemap.xml
http://www.mydomain.com/robots.txt
如何设置网址映射以使这些路由有效?
答案 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 :) --%>