Я хочу заблокировать бота с IIS. С помощью Apache вы можете добавить команду в файл .htaccess, как изложено здесь. Как мне добиться этого с помощью IIS 7.5?
Обновить
В дополнение к ответу ниже, я обнаружил несколько подходов с момента публикации этого вопроса:
Правило фильтра запроса
<system.webServer>
<security>
<requestFiltering>
<filteringRules>
<filteringRule name="BlockSearchEngines" scanUrl="false" scanQueryString="false">
<scanHeaders>
<clear />
<add requestHeader="User-Agent" />
</scanHeaders>
<appliesTo>
<clear />
</appliesTo>
<denyStrings>
<clear />
<add string="YandexBot" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
</security>
[...]
</system.webServer>
Правило перезаписи URL
<rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Get Lost." />
</rule>
В моем последнем проекте я остановился на варианте 2, поскольку он ориентирован на безопасность и основан на встроенном в IIS 7 сканировании URL-адресов.
Я знаю, что это старый вопрос, но в IIS 7.5 пользовательский агент может отказать, если вы используете фильтрацию запросов.
В IIS перейдите на веб-сайт, на котором вы хотите применить фильтр, а затем на правой панели щелкните значок Запросить фильтрацию значок. (возможно, вам придется включить эту функцию через диспетчер серверов).
Щелкните значок Правила вкладка, а затем в крайнем правом списке выберите «Добавить правило фильтрации»
Дайте ему имя, а затем в Заголовки сканирования в разделе поставьте «User-Agent».
Вы можете добавить файлы любого определенного типа для блокировки в Относится к, или вы можете оставить это поле пустым, чтобы применить его ко всем типам файлов.
В Запретить строкивведите все строки пользовательского агента, которые вы хотите заблокировать. В случае этого вопроса вы бы поставили здесь «Яндекс».
Я подтвердил эти изменения в Chrome, используя Переключатель пользовательского агента расширение.
Для поисковых роботов, которые не уважают Robots.txt, вы можете использовать перезапись URL-адреса на сервере для блокировки на основе их пользовательского агента, см.: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to-block-crawlers/
Вот простой способ запретить основным поисковым роботам - Google Bing и Yahoo - индексировать любой сайт на всем сервере. Это действительно полезно, если вы размещаете все свои бета-сборки на общедоступном сервере, но не хотите, чтобы они индексировались поисковыми системами.
Установите модуль перезаписи URL-адресов IIS.
На уровне сервера добавьте правило блокировки запросов. Заблокируйте заголовки пользовательского агента, соответствующие регулярному выражению: googlebot | msnbot | slurp.
Или просто вставьте это правило в «C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config»
<system.webServer> <rewrite> <globalRules> <rule name="RequestBlockingRule1" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="googlebot|msnbot|slurp" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this page." /> </rule> </globalRules> </rewrite> </system.webServer>
Это заблокирует Google, Bing и Yahoo от индексации любого сайта, опубликованного на сервере. Чтобы проверить это, попробуйте Переключатель пользовательского агента Firefox.
Для получения дополнительной информации: http://www.iis.net/download/URLRewrite
Обычно вы используете robots.txt. Он будет работать на всех хорошо настроенных ботах.
Для ботов с плохим поведением часто мало что можно сделать. Вы можете ограничить количество подключений или пропускную способность вашего брандмауэра или веб-сервера, но основные боты обычно используют несколько IP-адресов. Ограничение на основе строк пользовательского агента, как правило, не является хорошей идеей, так как бот может подделать их тривиально, а боты, которые не заботятся о robots.txt, также имеют тенденцию подменять строки агента пользователя. Это работает в конкретном случае, когда бот отправляет правильный пользовательский агент, но не подчиняется robots.txt.
Изменить: если вы действительно хотите заблокировать на основе агента пользователя, а не отправлять его обратно на свой брандмауэр или аналогичный, я думаю, что самый простой способ - использовать URLScan. Вы пишете правило, которое выглядит примерно так:
[Options]
RuleList=DenyYandex
[DenyYandex]
DenyDataSection=Agents
ScanHeaders=User-Agent
[Agents]
Yandex