.htaccess允许来自特定用户代理的所有内容

时间:2012-08-08 12:40:17

标签: .htaccess user-agent

我有一个我正在开发的网站,它也将被纳入网络应用程序。我在.htaccess文件中有以下代码,以防止任何不在我允许的IP上的访问:

Order deny,allow
Deny from all
AuthName "Restricted Area - Authorization Required" 
AuthUserFile /home/content/html/.htpasswd 
AuthType Basic
Require valid-user
Allow from 12.34.567.89 
Satisfy Any

问题: 我想添加Allow from规则,该规则也允许特定的HTTP用户代理访问该网站。

如果不是用户代理,我发现此代码重定向:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule ^files/.*$ / [R=302,L]

但我似乎无法弄清楚如何将其变成Allow from规则。帮助

更新

我发现下面的代码阻止了特定的用户代理...我想说“if not myuseragent,然后阻止。”

<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>

5 个答案:

答案 0 :(得分:18)

SetEnvIfNoCase User-Agent .*google.* search_robot
SetEnvIfNoCase User-Agent .*yahoo.* search_robot
SetEnvIfNoCase User-Agent .*bot.* search_robot
SetEnvIfNoCase User-Agent .*ask.* search_robot

Order Deny,Allow
Deny from All
Allow from env=search_robot

Htaccess SetEnvIf and SetEnvIfNoCase Examples

答案 1 :(得分:7)

  

我只想允许一个SPECIFIC用户代理而不是尝试   阻止所有

这是我的配置只允许wget:

SetEnvIf User-Agent .*Wget* wget

Order deny,allow
Deny from all
Allow from env=wget

答案 2 :(得分:5)

Allow fromRewrite*是来自两个不同Apache模块的指令。

第一个是mod_authz_host,另一个来自mod_rewrite

您可以使用mod_rewrite做您想做的事情:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule .* - [F,L]

答案 3 :(得分:1)

如果您不想使用mode_rewrite,使用Apache 2.4可以使用类似的内容:

//will find all occurances of all words and make them strong in html
function strong_words( $title, $searched_words_array) {
    //for all words in array
    foreach ($searched_words_array as $word){

        $lastPos = 0;
        $positions = array();
        //find all positions of word
        while (($lastPos = stripos($title, $word, $lastPos))!== false) {
           $positions[] = $lastPos;
           $lastPos = $lastPos + strlen($word);
        }
        //reverse sort numeric array 
        rsort($positions);

        // highlight all occurances
        foreach ($positions as $pos) {
            $title = strong_word($title , $word, $pos);
        }
    }

//apply strong html code to occurances  
$title = str_replace('#####','</strong>',$title);
$title = str_replace('*****','<strong>',$title);
return $title; // return highlighted data
}


function strong_word($title , $word, $pos){
//ugly hack to not use <strong> , </strong> here directly, as it can get replaced if searched word contains charcters from strong
$title = substr_replace($title, '#####', $pos+strlen($word) , 0) ;
$title = substr_replace($title, '*****', $pos , 0) ;
return $title;
} 


$title = 'This is Great Mango00lk mango';
$word = array('man','a' , 'go','is','g', 'strong') ;

echo strong_words($title,$word);

答案 4 :(得分:-1)

  

我只想允许一个SPECIFIC用户代理,而不是试图阻止所有

您好

您需要考虑的是,一些机器人(尤其是“更大”的机器人)会使用多个用户代理来访问您的网站。 例如,Googlebot(抓取工具)可以使用所有这些不同的用户代理:

Googlebot-Image/1.0 
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1;+htt://www.google.com/bot.html)
GoogleProducer 
SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
Google-Site-Verification/1.0
Google-Test
Googlebot/2.1 (+http://www.google.com/bot.html) 

我并不是在谈论Google Plus和Google使用的其他许多机器人。

雅虎和其他人一样。

就在本周,我们的公司(Incapsula)推出Botopedia.org - a Community-Sourced bot directory。它是100%免费并且对所有人开放,您可以使用它来查找您想要允许的所有机器人的完整用户代理列表。

如果需要,它还具有针对Bot验证的反向IP功能,因为正如我们的recent study of Fake Googlebot visits所示,一些垃圾邮件发送者甚至网络攻击者将使用合法的机器人签名来轻松进入您的网站。

希望这有帮助。