如何只允许特定的用户代理访问URL?

时间:2021-08-24 作者:Mr SKT

假设这是我的URL:https://www.mrskt.com/sitemap_index.xml

我只想允许特定的用户代理。我的意思是,只有谷歌、Bing、Ahrefs等搜索机器人才能访问该URL。

没有其他用户代理可以访问该URL。

我该怎么做?

1 个回复
最合适的回答,由SO网友:Rodgath 整理而成

至少有两种方法可以阻止其他用户代理,但只允许少数几种。这可以通过编辑来完成。WordPress网站根目录中的htaccess文件。

选项1使用mod_rewrite, 将下面的代码添加到.htaccess 文件

<IfModule mod_rewrite.c>

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !(Google|Bing)
RewriteRule ^(sitemap_index\\.xml)$ - [F,L]

</IfModule>

选项2

此选项使用mod_setenvif 具有的模块SetEnvIfNoCase 阻止incasemod_rewrite 不可用。将下面的代码添加到.htaccess 文件

<IfModule mod_setenvif.c>

SetEnvIfNoCase User-Agent .*google.* allowed_user_agents
SetEnvIfNoCase User-Agent .*bing.* allowed_user_agents

Order Allow,Deny
<FilesMatch "^(sitemap_index\\.xml)$">
Deny from all
Allow from env=allowed_user_agents
</FilesMatch>

</IfModule>
你也可以use robots.txt file, 但我还没有测试这个。

相关推荐

HTAccess重定向-替换特殊字符

在我的previous post, 我问过如何301重定向所有.com/language/X URL到.com/members/?members_search=X 使用htaccess。谢天谢地,我得到了帮助,解决办法是RewriteRule ^language/(.*) /members/?members_search=$1 [R=301,L]我刚刚发现,我还需要将任何现有连字符转换为空格。我假设不会有超过2个连字符。测试用例http://example.com/language/american-en