2013-07-31 3 views
6

Я хочу сопоставить статические файлы sitemap.xml и robots.txt, которые находятся в моем каталоге веб-приложений. URL-адреса должны быть следующими: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" (просмотр: "/ sitemap") не работает. – confile

8

Самый простой способ сказать Grails игнорировать их в UrlMappings.groovy:

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

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

Этот ответ более точно отражает то, что запросил ОП, хотя выбранный ответ обеспечивает рабочий альтернативный подход. – mnd

0

Это может быть также полезно создать NoFollow в среде Staging, если вы используете один. Не уверен, что theres является прецедентом с индексированием промежуточного сайта .... так что если вы согласитесь, вы сможете использовать эти шаги, чтобы помочь блокировать это.

Если вы используете Tomcat, установить переменную окружения, такие как NOFOLLOW = истинный -> смотрите здесь, например: TOMCAT_OPTS, environment variable and System.getEnv()

Далее, как упомянуто @doelleri установить urlMappings

UrlMappings

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

Затем с помощью robotsController для обнаружения ENVIR которую вы установили на своем промежуточном коте.

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:/
Смежные вопросы