无法在 asp.net mvc 中为 robots.txt 映射路由
Unable to map route for robots.txt in asp.net mvc
我正在开发 asp.net mvc 应用程序。我正在为我的应用程序创建 robots.txt 以防止机器人,因为我当前的站点收到许多机器人请求。于是找了这个link,来创建robots.txt。但是当我像这样访问我的应用程序时输入 url、"www.domain.com/robots.txt",它总是返回 404 页面。
这是我在 HomeController 中的操作方法
public ActionResult Robots()
{
Response.ContentType = "text/plain";
return View();
}
这是我的机器人视图
@{
Layout = null;
}
User-agent:*
Disallow:/
我在 RouteConfig
中为 robots.txt 配置了这样的路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Robots.txt",
"robots.txt",
new { controller = "Home", action = "Robots" },
new string[] { "AyarDirectory.Web.Controllers" }
);
//other routes
}
但是当我访问此 url、"www.domain.com/robots.txt" 时,它总是返回 404 页面。如何将 robots.txt 正确添加到我的应用程序?
默认情况下,ASP.NET MVC 不允许创建以文件扩展名结尾的路由。要绕过此安全限制,您需要将以下内容添加到 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>
会说与上面相同的事情,您需要更改 web.config 以允许带有 .txt 的路由工作。我在做的一个项目中遇到了同样的问题,但我让它工作了。
但是,如果您在没有模型的情况下使用机器人输出视图,您最好保持静态 robots.txt,因为它不会给您带来任何优势。另一种方法是使用字符串生成器直接从操作中输出文本。
在 Asp.net Core 中,您只需将 robots.txt 文件添加到 wwwroot 目录即可。
Nkosi 在 web.config 方法中的 System.Web.Handlers.TransferRequestHandler
方法由于我工作的环境而对我不起作用,导致 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>
我正在开发 asp.net mvc 应用程序。我正在为我的应用程序创建 robots.txt 以防止机器人,因为我当前的站点收到许多机器人请求。于是找了这个link,
这是我在 HomeController 中的操作方法
public ActionResult Robots()
{
Response.ContentType = "text/plain";
return View();
}
这是我的机器人视图
@{
Layout = null;
}
User-agent:*
Disallow:/
我在 RouteConfig
中为 robots.txt 配置了这样的路由 public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Robots.txt",
"robots.txt",
new { controller = "Home", action = "Robots" },
new string[] { "AyarDirectory.Web.Controllers" }
);
//other routes
}
但是当我访问此 url、"www.domain.com/robots.txt" 时,它总是返回 404 页面。如何将 robots.txt 正确添加到我的应用程序?
默认情况下,ASP.NET MVC 不允许创建以文件扩展名结尾的路由。要绕过此安全限制,您需要将以下内容添加到 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>
会说与上面相同的事情,您需要更改 web.config 以允许带有 .txt 的路由工作。我在做的一个项目中遇到了同样的问题,但我让它工作了。
但是,如果您在没有模型的情况下使用机器人输出视图,您最好保持静态 robots.txt,因为它不会给您带来任何优势。另一种方法是使用字符串生成器直接从操作中输出文本。
在 Asp.net Core 中,您只需将 robots.txt 文件添加到 wwwroot 目录即可。
Nkosi 在 web.config 方法中的 System.Web.Handlers.TransferRequestHandler
方法由于我工作的环境而对我不起作用,导致 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>