根据环境为ASP.NET Core网站动态生成robots.txt

news/2024/5/15 3:09:23/文章来源:https://blog.csdn.net/cunfuxiao7305/article/details/109050933

I'm putting part of older WebForms portions of my site that still run on bare metal to ASP.NET Core and Azure App Services, and while I'm doing that I realized that I want to make sure my staging sites don't get indexed by Google/Bing.

我将仍旧在裸机上运行的网站的旧WebForms部分的一部分放到ASP.NET Core和Azure App Services中,在这样做的同时,我意识到我想确保我的暂存网站不会出现被Google / Bing索引。

I already have a robots.txt, but I want one that's specific to production and others that are specific to development or staging. I thought about a number of ways to solve this. I could have a static robots.txt and another robots-staging.txt and conditionally copy one over the other during my Azure DevOps CI/CD pipeline.

我已经有一个robots.txt,但是我想要一个特定于生产的机器人,另一个特定于开发或登台的机器人。 我考虑了多种解决方法。 我可以有一个静态robots.txt和另一个robots-staging.txt,并在我的Azure DevOps CI / CD管道中有条件地一个复制一个。

Then I realized the simplest possible thing would be to just make robots.txt be dynamic. I thought about writing custom middleware but that sounded like a hassle and more code that needed. I wanted to see just how simple this could be.

然后,我意识到最简单的方法就是使robots.txt动态化。 我考虑过编写自定义中间件,但这听起来很麻烦,需要更多代码。 我想看看这有多简单。

  • You could do this as a single inline middleware, and just lambda and func and linq the heck out out it all on one line

    您可以将其作为单个内联中间件来完成,而只需lambda和func和linq即可在一行上全部完成
  • You could write your own middleware and do lots of options, then activate it bested on env.IsStaging(), etc.

    您可以编写自己的中间件并做很多选择,然后在env.IsStaging()等上激活它。
  • You could make a single Razor Page with environment taghelpers.

    您可以使用环境taghelpers制作一个Razor Page。

The last one seemed easiest and would also mean I could change the cshtml without a full recompile, so I made a RobotsTxt.cshtml single razor page. No page model, no code behind. Then I used the built-in environment tag helper to conditionally generate parts of the file. Note also that I forced the mime type to text/plain and I don't use a Layout page, as this needs to stand alone.

最后一个似乎最简单,这也意味着我可以在不进行完全重新编译的情况下更改cshtml,因此我制作了RobotsTxt.cshtml单个剃须刀页面。 没有页面模型,没有代码。 然后,我使用内置的环境标签帮助程序有条件地生成文件的各个部分。 另请注意,我将mime类型强制设置为text / plain,并且我不使用“布局”页面,因为这需要单独使用。

@page
@{
Layout = null;
this.Response.ContentType = "text/plain";
}
# /robots.txt file for http://www.hanselman.com/
User-agent: *
<environment include="Development,Staging">Disallow: /</environment>
<environment include="Production">Disallow: /blog/private
Disallow: /blog/secret
Disallow: /blog/somethingelse</environment>

I then make sure that my Staging and/or Production systems have ASPNETCORE_ENVIRONMENT variables set appropriately.

然后,我确保我的登台和/或生产系统具有适当设置的ASPNETCORE_ENVIRONMENT变量。

ASPNETCORE_ENVIRONMENT=Staging

I also want to point out what may look like odd spacing and how some text is butted up against the TagHelpers. Remember that a TagHelper's tag sometimes "disappears" (is elided) when it's done its thing, but the whitespace around it remains. So I want User-agent: * to have a line, and then Disallow to show up immediately on the next line. While it might be prettier source code to have that start on another line, it's not a correct file then. I want the result to be tight and above all, correct. This is for staging:

我还想指出看起来像是奇数行距的内容,以及一些文本如何与TagHelpers对接。 请记住,TagHelper的标签在完成处理后有时会“消失”(消失),但是标签周围的空白仍然存在。 所以我希望User-agent:*有一行,然后禁止在下一行立即显示。 虽然以另一行开头可能是更漂亮的源代码,但它不是正确的文件。 我希望结果严格,最重要的是,正确。 这是分期进行的:

User-agent: *
Disallow: /

This now gives me a robots.txt at /robotstxt but not at /robots.txt. See the issue? Robots.txt is a file (or a fake one) so I need to map a route from the request for /robots.txt to the Razor page called RobotsTxt.cshtml.

现在,这给我一个位于/ robotstxt的robots.txt,但没有给我一个/robots.txt的机器人。 看到问题了吗? Robots.txt是一个文件(或伪造的文件),因此我需要将一条路径从对/robots.txt的请求映射到名为RobotsTxt.cshtml的Razor页面。

Here I add a RazorPagesOptions in my Startup.cs with a custom PageRoute that maps /robots.txt to /robotstxt. (I've always found this API annoying as the parameters should, IMHO, be reversed like ("from","to") so watch out for that, lest you waste ten minutes like I just did.

在这里,我在Startup.cs中添加了带有自定义PageRoute的RazorPagesOptions,该自定义PageRoute将/robots.txt映射到/ robotstxt。 (我总是发现这个API很烦人,因为恕我直言,参数应该像(“ from”,“ to”)那样反向,所以要当心,以免您像我刚才那样浪费十分钟。

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/robotstxt", "/Robots.Txt");
});
}

And that's it! Simple and clean.

就是这样! 简单干净。

You could also add caching if you wanted, either as a larger middleware, or even in the cshtml Page, like

如果需要,您还可以添加缓存,既可以作为更大的中间件,也可以添加到cshtml Page中,例如

context.Response.Headers.Add("Cache-Control", $"max-age=SOMELARGENUMBEROFSECONDS");

but I'll leave that small optimization as an exercise to the reader.

但我会将这种小的优化留给读者练习。

UPDATE: After I was done I found this robots.txt middleware and NuGet up on GitHub. I'm still happy with my code and I don't mind not having an external dependency, but it's nice to file this one away for future more sophisticated needs and projects.

更新:完成后,我在GitHub上找到了robots.txt中间件和NuGet。 我仍然对我的代码感到满意,并且我不介意没有外部依赖关系,但是很高兴将其归档以便将来更复杂的需求和项目。

How do you handle your robots.txt needs? Do you even have one?

您如何处理robots.txt的需求? 你甚至有一个吗?

翻译自: https://www.hanselman.com/blog/dynamically-generating-robotstxt-for-aspnet-core-sites-based-on-environment

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_815410.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEO的艺术(原书第2版)

《SEO的艺术(原书第2版)》基本信息原书名&#xff1a;The Art of SEO, Second Edition作者&#xff1a; Eric Enge Stephan Spencer Jessie Stricchiola Rand Fishkin译者&#xff1a; 姚军丛书名&#xff1a; O’Reilly精品图书系列出版社&#xff1a;机械工业出版社ISBN&…

HTML+CSS网站开发兵书

《HTMLCSS网站开发兵书》基本信息作者&#xff1a; 高洪涛丛书名&#xff1a; 程序员藏经阁出版社&#xff1a;电子工业出版社ISBN&#xff1a;9787121212369上架时间&#xff1a;2013-8-26出版日期&#xff1a;2013 年9月开本&#xff1a;16开页码&#xff1a;516版次&#xf…

浅谈大型网站动态应用系统架构(转)

动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用系统…

2012年5月美国旅游网站排名

2019独角兽企业重金招聘Python工程师标准>>> 2012年5月排名&#xff1a;Expedia居于旅游中介网站首位&#xff0c;TripAdvisor居于目的地及住宿网站首位&#xff0c;Southwest Airlines居于航空公司网站首位。 旅游中介 排名 网站名称 域名 访问率 1 Expedia …

7条大型网站设计和维护的关键技巧

Collis Taeed曾写过一篇博文《7 Crucial Tips for Designing and Maintaining a Large Site 》&#xff0c;为我们分享了大型网站设计及维护的关键技巧&#xff0c;alswl已将此文译成中文&#xff0c;现转载于此&#xff0c;以便大家学习。全文如下&#xff1a; 项目范围和规模…

60多个超炫的视差滚动效果网站设计欣赏

2019独角兽企业重金招聘Python工程师标准>>> 今天见到ebay新版网站的介绍页面&#xff0c;感觉很酷&#xff0c;Jeanne提到这是视差滚动效果&#xff0c;于是想起来之前见到的一些&#xff0c;这种通过鼠标滚动来展现页面元素的做法越来越常见了&#xff0c;于是整理…

asp.net 获取网站根目录

网站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath 任何于Request/HttpContext.Current等相关的方法, 都只能在有请求上下文或者页面时使用. 即在无请求上下文时,HttpContext.Current为null. 而上面提到的方法一直…

分享40款效果非常漂亮的 HTML5 CSS3 网站模板,模板免费下载

HTML5 作为下一代网页语言&#xff0c;加入中众多更具语义的标签&#xff0c;例如video、audio、section、article、header 和 nav 等。而 CSS3 作为 CSS 的下一代版本&#xff0c;同样引入了很多很酷的属性&#xff0c;以前很多需要 JavaScript 才能实现的复杂效果&#xff0c…

小网站到大网站的发展历程

为什么80%的码农都做不了架构师&#xff1f;>>> 开始都在一台服务器上&#xff0c;应用服务器&#xff0c;数据库服务器&#xff0c;文件服务器&#xff0c;访问量大了&#xff0c;内存不够用了&#xff0c;把数据库服务器踢出去&#xff0c;有钱的话可以分成3台&a…

秒杀全网!研发、运营必备实用工具网站

目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、招聘求职 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、算法 11、在线工具宝典大全 12、音乐 13、神辅助工具 14、语音处理 15、大数据 16、电子书 程序员开发需要具备良好的信息检索…

java开发web网站的路由设计_理解Web路由(浅谈前后端路由与前后端渲染)

1.什么是路由?在Web开发过程中&#xff0c;经常会遇到『路由』的概念。那么&#xff0c;到底什么是路由&#xff1f;简单来说&#xff0c;路由就是URL到函数的映射。路由的概念最开始是由后端提出来的&#xff0c;在以前用模板引擎开发页面的时候&#xff0c;是使用路由返回不…

[Erlang24]使用zotonic搭建网站记录

zotonic的搭建网站(blog)记录&#xff1a; zotonic:用Erlang做的一个web 框架&#xff1a;和wordpress 类似&#xff0c;但是官网称比PHP CMS要快10倍以上先看看我的成果&#xff1a;正弦波 localhost&#xff1a;本地回环地址 443&#xff1a;安全服务端口&#xff0c;好记&am…

网站定位之---根据IP获得区域

记得以前做一个培训机构网站时候需要定位&#xff0c;那时候用的搜狐的api&#xff0c;不是很精准。 demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/3.常用技能/06.Position/01.IPToPosition 后来做电商的时候用的新浪的api&#xff0c;感觉还行&#xff…

在阿里云centOS环境下搭建基于thinkphp的网站

Step1:购买服务器以及配置选择 作为学生党的优惠&#xff0c;30块3个月的服务器使用时间&#xff08;为了成为未来的拍黄片导演怎么口以不舍得花钱&#xff09; 云服务器ECS 学生特惠 基本按照一开始给你的配置就好了&#xff0c;除了公共镜像那里选择&#xff0c;看个人需求吧…

大型网站架构系列:负载均衡详解(1)

面对大量用户访问、高并发请求&#xff0c;海量数据&#xff0c;可以使用高性能的服务器、大型数据库&#xff0c;存储设备&#xff0c;高性能Web服务器&#xff0c;采用高效率的编程语言比如(Go,Scala)等&#xff0c;当单机容量达到极限时&#xff0c;我们需要考虑业务拆分和分…

大型分布式网站架构技术总结

2019独角兽企业重金招聘Python工程师标准>>> 本文是学习大型分布式网站架构的技术总结。对架构一个高性能&#xff0c;高可用&#xff0c;可伸缩&#xff0c;可扩展的分布式网站进行了概要性描述&#xff0c;并给出一个架构参考。一部分为读书笔记&#xff0c;一部分…

夺命雷公狗ThinkPHP项目之----企业网站28之网站前台左侧导航的实现

我们基于刚才在model层的找顶级分类的代码在进行修改即可&#xff1a; <?php namespace Home\Controller; use Think\Controller; class CommonController extends Controller {function __construct(){//继承父类的构造方法&#xff0c;所以网站在执行的时候会先执行他par…

大型网站及其演进架构之一

大型网站&#xff1a;网站是用来访问的&#xff0c;访问量大&#xff0c;数据量大&#xff0c;即海量数据高并发的访问&#xff0c;就是大型网站。 以交易系统为例&#xff0c;简单介绍下网站的演进过程&#xff0c;比较简陋&#xff0c;权当扫盲。 交易系统包含三个部分&…

大型网站及其演进架构之二

【前言】 我们以 Java Web 为例&#xff0c;来搭建一个简单的电商系统&#xff0c;看看这个系统可以如何一步步演变。 该系统具备的功能&#xff1a; 用户模块&#xff1a;用户注册和管理 商品模块&#xff1a;商品展示和管理 交易模块&#xff1a;创建交易和管理 【正文】 …

SEO关键词外包优化,关键词如何定义?

SEO外包优化&#xff0c;最重要的一项就是找到核心关键词&#xff0c;每个关键词都肩负着自己的责任。很多品牌投放了可观的资源&#xff0c;却没有带来很好的流量效果&#xff0c;而有些的品牌定位的关键词却能帮助企业成功出圈&#xff0c;并有长期曝光的效果。TOM品牌营销是…