9

我有一个 robots.txt 不是静态的,而是动态生成的。我的问题是创建从 root/robots.txt 到我的控制器操作的路由。

有效

routes.MapRoute(
name: "Robots",
url: "robots",
defaults: new { controller = "Home", action = "Robots" });

不起作用

routes.MapRoute(
name: "Robots",
 url: "robots.txt", /* this is the only thing I've changed */
defaults: new { controller = "Home", action = "Robots" });

“.txt”明显导致 ASP 出错

4

3 回答 3

14

您需要将以下内容添加到您的 web.config 文件中,以允许执行带有文件扩展名的路由。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ...Omitted -->
  <system.webServer>
    <!-- ...Omitted -->
    <handlers>
      <!-- ...Omitted -->
      <add name="RobotsText" 
           path="robots.txt" 
           verb="GET" 
           type="System.Web.Handlers.TransferRequestHandler" 
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

有关更多详细信息,请参阅我关于使用 ASP.NET MVC 动态生成 Robots.txt的博客文章。

于 2015-08-07T06:27:33.280 回答
6

在这里回答:带有扩展名的 url 没有被路由处理。基本上,当 asp 看到“。”时。它调用静态文件处理程序,因此从不使用动态路由。需要修改 web.config 文件,以便 /robots.txt 不会被静态文件处理程序拦截。

于 2013-06-19T03:29:44.630 回答
0

由于我工作的环境, Muhammad Rehan SaeedSystem.Web.Handlers.TransferRequestHandler在 web.config 方法中的方法对我不起作用,导致 500 错误。

使用 web.config url 重写规则的替代方法对我有用:

<rewrite>
    <rules>
        <rule name="Dynamic robots.txt" stopProcessing="true">
            <match url="robots.txt" />
            <action type="Rewrite" url="/DynamicFiles/RobotsTxt" />
        </rule>
    </rules>
</rewrite>
于 2021-11-22T02:11:19.737 回答