5

我正在使用 Tomcat 7 来托管我的应用程序。我在 tomcat-home\conf\Catalina\localhost 下使用了 ROOT.xml 文件

<Context 
  docBase="C:\Program Files\Apache Software Foundation\Tomcat 7.0\mywebapp\MyApplication" 
  path="" 
  reloadable="true" 
/>

这是在根上下文中加载我的 webapp。

但现在我很困惑把robots.txtsitemap.xml文件放在哪里。当我放入 C:\Program Files\Apache Software Foundation\Tomcat 7.0\mywebapp\MyApplication 下时,它没有出现。

我也试过把它放在里面C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT,以防万一。但没有任何效果。我仍然找不到 404。任何人都可以请指导。

ps 我的 Web 应用程序运行良好。只是我的robots.txt文件无法访问。

编辑

我的 web.xml 文件:

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
4

3 回答 3

6

只需robots.txt放入Tomcat_DIR/webapps/ROOT/

于 2013-04-18T07:52:32.010 回答
3

它应该在您的上下文目录中

mywebapp\MyApplication

就在您将拥有您的 web-inf 目录、index.html 等的地方。

更新:

根据我们的讨论,所有 url 都由 Spring MVC DelegatingFilterProxy 处理,因此您需要以某种方式从该过滤器中排除 *.txt,可能是通过扩展 DelegatingFilterProxy 并在 web.xml 中配置该过滤器

解决方案:我可以通过 Spring MVC 中的这个 hack 来提供静态内容:

<mvc:resources mapping="/robots.txt" location="/robots.txt" order="0"/>

省了我很多头痛。:) 为其他人编写它以从中受益。

于 2012-12-15T10:11:17.367 回答
0

我遇到了同样的问题:我没有测量我将 robots.txt 放在哪里或将<mvc:resources mapping="/robots.txt" location="/robots.txt" order="0"/>每个请求配置到 robots.txt 返回 404 状态。

这里的问题是我在客户端使用 Spring MVC 和 Backbone.js MVC,它有它的路由。所以我无法调整<url-pattern></url-pattern>为两个 MVC 服务。

我在这里找到的唯一快速而丑陋的解决方案是将 /robots.txt 的请求作为 Spring MVC 中的请求处理

@RequestMapping(value = "/robots.txt", produces = {"text/plain"}, method = RequestMethod.GET)
@ResponseBody
public String getRobotsTxt() {
    return "User-agent: *" + 
   "\n" + "Allow: /js/views/*.js" + 
   "\n" + "Allow: /js/*.js" + 
   "\n" + "Allow: /css/*.css" + 
   "\n" + "Allow: /css/*.png" + 
   "\n" + "Disallow: /cgi-bin" + 
   "\n" + "Sitemap: http://blabla/sitemap.xml";
}
于 2015-08-27T18:22:16.577 回答