我想创建一个 robots.txt 文件并将其提供给我的 IIS(在本例中为 7)实例上的所有站点。
我不想在任何单独的站点上配置任何东西。
我怎样才能做到这一点?
答案1
可以使用 IIS 的 Url Rewrite 模块来完成。
创建以下文件夹:
\Inetpub\wwwroot\allsites
\Inetpub\wwwroot\site1
\Inetpub\wwwroot\site2
使用上面的 site# 路径创建 2 个网站。在每个网站内,创建一个名为所有网站指向\Inetpub\wwwroot\allsites
接下来,创建这些文件。每个文件都应具有唯一内容,以验证其在测试期间是否正常工作:
\Inetpub\wwwroot\allsites\robots.txt
\Inetpub\wwwroot\site2\robots.txt
如果尚未安装,请安装 IIS 的 Url Rewrite 模块。
将其放置在每个网站的 web.config 中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Rewrite robots.txt">
<match url="^(robots.txt)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="/allsites/robots.txt" />
</rule>
</rules>
</rewrite>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
此规则的作用是匹配诸如 之类的 URL http://mysite/robots.txt
,并将其重写为请求http://mysite/allsites/robots.txt instead
。但是,仅当 robots.txt 文件不存在于该位置的文件系统中时,它才会执行此操作。
因此,您可以在所有网站中放置一个通用的 robots.txt,但可以通过在网站根目录中放置自定义 robots.txt 来覆盖您想要的任何网站。
这不是重定向。远程网络爬虫不知道 IIS 正在幕后执行此操作。
更新:
我还没有在我的配置中这样做,但 Url Rewrite 模块确实支持可以在服务器级别定义的全局规则。因此您不需要为每个站点定义它。
http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/
“全局和分布式重写规则。URL Rewrite 使用全局规则来定义服务器范围的 URL 重写逻辑。这些规则在 applicationHost.config 文件中定义,它们取代在配置层次结构中较低级别配置的规则。该模块还使用分布式规则来定义特定于特定配置范围的 URL 重写逻辑。可以使用 Web.config 文件在任何配置级别上定义此类规则。”
答案2
robots.txt 文件的替代方案是X-机器人标签HTTP 标头,详细信息如下:
http://googleblog.blogspot.com/2007/07/robots-exclusion-protocol-now-with-even.html
可以通过添加自定义 HTTP 标头在 IIS 上应用于整个服务器
IIS 6:右键单击“网站”文件夹 > 属性 > HTTP 标头
IIS 7:在服务器主屏幕上,单击“HTTP 请求标头”,选择“添加”
与 robots.txt 不同,这似乎是 Google 专有的,并且与 robots.txt 一样,它仅对“兼容”的搜索引擎索引器有用。
答案3
答案4
不幸的是,由于 robots.txt 文件必须位于站点的根目录中,因此我想不出有什么简单的方法可以实现您的要求。如果是位于下一级目录中的内容,则可以在每个站点中配置一个虚拟目录,但这不适用于 robots.txt 文件。
因此,除了编写一个应用程序/服务定期将 robots.txt 文件复制到每个站点之外,您还可以在每个站点配置一个重写规则,该规则将重写(而不是重定向)~/robots.txt 请求以从虚拟目录或可能完全不同的 URL 提供文件。