如何为 IIS 实例上的所有网站创建单个 robots.txt 文件

如何为 IIS 实例上的所有网站创建单个 robots.txt 文件

我想创建一个 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

您可以使用符号链接吗?这样可行吗?

http://www.howtogeek.com/howto/windows-vista/using-symlinks-in-windows-vista/

答案4

不幸的是,由于 robots.txt 文件必须位于站点的根目录中,因此我想不出有什么简单的方法可以实现您的要求。如果是位于下一级目录中的内容,则可以在每个站点中配置一个虚拟目录,但这不适用于 robots.txt 文件。

因此,除了编写一个应用程序/服务定期将 robots.txt 文件复制到每个站点之外,您还可以在每个站点配置一个重写规则,该规则将重写(而不是重定向)~/robots.txt 请求以从虚拟目录或可能完全不同的 URL 提供文件。

相关内容