我想创build一个robots.txt文件,并为我的IIS上的所有站点(本例中为7)提供服务。
我不想在任何个人网站上configuration任何东西。
我怎样才能做到这一点?
它可以使用IIS的URL重写模块完成。
创build这些文件夹:
\Inetpub\wwwroot\allsites \Inetpub\wwwroot\site1 \Inetpub\wwwroot\site2
使用上面的站点#的path创build2个网站。 在每个网站的内部,创build一个名为allsites指向\ Inetpub \ wwwroot \ allsites的虚拟目录
接下来,创build这些文件。 每个人都应该有独特的内容来validation这是在testing过程中工作:
\Inetpub\wwwroot\allsites\robots.txt \Inetpub\wwwroot\site2\robots.txt
如果您尚未安装IIS的URL重写模块。
把它放在每个网站的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覆盖您想要的任何站点。
这不是一个redirect。 远程networking爬虫不知道IIS在幕后做这件事。
更新:
我没有在我的configuration上这样做,但Url Rewrite模块不支持可以在服务器级别定义的全局规则。 所以你不需要为每个站点定义这个。
http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/
“全局和分布式重写规则URL重写使用全局规则来定义服务器范围的URL重写逻辑,这些规则在applicationHost.config文件中定义,它们取代configuration层次结构中较低级别configuration的规则,模块也使用分布式规则来定义特定于特定configuration范围的URL重写逻辑,这种types的规则可以通过使用Web.config文件在任何configuration级别上定义。
robots.txt文件的替代方法是X-Robots-Tag HTTP标头,详情如下:
http://googleblog.blogspot.com/2007/07/robots-exclusion-protocol-now-with-even.html
通过添加一个自定义的HTTP头,可以在IIS上的服务器范围内应用
IIS 6:右键单击“网站”文件夹>属性> HTTP标题
IIS 7:在服务器主屏幕上,点击HTTP请求头,select“添加”
与robots.txt不同,这似乎是专有的Google和robots.txt一样,只对“合规”的search引擎索引器有用。
不幸的是,因为robots.txt文件必须位于网站的根目录下,所以没有简单的方法可以让我想到做你想做的事情。 如果这是一个目录下来,那么你可以在每个站点configuration一个虚拟目录,但这只是不适用于robots.txt文件。
因此,在短时间内写一个应用程序/服务,将robots.txt文件定期拷贝到每个站点,你可能会在每个站点中configuration一个重写规则来重写(而不是redirect)〜/ robots.txt请求从虚拟目录提供文件,或者可能完全不同的URL。