14

我一直在遵循本文中的建议,在 asp.net mvc3 中设置 robots.txt 文件以使用控制器处理服务器响应,并且 IIS 8.0 express 返回文件未找到错误,而不是 asp。净误差。

在这些情况下,如何让 IIS 不查找文件?web.config 中有我需要的东西吗?

4

2 回答 2

36

IIS 试图在这里变得智能。他截取了 url 中的点并认为这是一个静态文件并尝试使用默认StaticFile处理程序来提供它。它不会让事件到达托管的 ASP.NET 应用程序。

第一种可能性是在您的 web.config 中添加以下内容

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true" />

但实际上我不建议您这样做,因为这可能会对应用程序的性能产生负面影响,因为现在对静态文件(例如 .js、.css、图像...)的所有请求都将通过托管管道。

推荐的方法是将以下处理程序添加到您的web.config(<handlers>标记<system.webServer>):

<system.webServer>
    <handlers>
        <add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        ...
    </handlers>
</system.webServer>

请注意我们如何指定此处理程序仅适用于特定的 URL 和 HTTP 动词。

现在,当您 GET 时/robots.txt,IIS 将不再使用处理程序处理它,StaticFile而是将其传递给托管管道 ASP.NET。然后会被路由引擎拦截,路由到对应的控制器动作。

于 2012-12-29T17:24:33.857 回答
1

除非您需要动态生成的robots.txt文件(这很少需要),否则只需执行以下操作:

  • 忽略到 robots.txt 的路由

    routes.IgnoreRoute("robots.txt");

  • 将 robots.txt 文件添加到您的根目录

于 2013-02-03T13:35:20.730 回答