2012-08-08 28 views
14

我有一個網站,我正在開發,也將被拉入到一個Web應用程序。我在我的.htaccess文件下面的代碼,以防止任何人,是不是我的允許的IP接入:.htaccess允許所有從特定用戶代理

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規則。幫幫我?

UPDATE

我發現下面的代碼以阻止特定用戶代理...我反而喜歡說「如果沒有myuseragent,然後阻止。」

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

回答

14
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

+0

我fo以及你剛剛在SO上發佈的代碼......我只想讓一個特定的用戶代理而不是試圖阻止所有的(我不想冒險失去一個。)任何想法? – adamdehaven 2012-08-08 12:48:09

+0

@AdamD我改進了我的答案。它不是現在解決你的問題嗎? – 2012-08-08 12:55:07

+0

@AdamD正確。 – 2012-08-08 13:05:43

5

Allow fromRewrite*是從兩個不同的Apache的模塊指令。

第一個是mod_authz_host,另一個是mod_rewrite

您可以使用mod_rewrite做你想要什麼:

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

所以用你發佈的代碼,這將工作在所有目錄?或者我需要在每個目錄中放置一個帶有這個代碼的'.htaccess'文件嗎? – adamdehaven 2012-08-08 12:53:01

+0

@AdamD:這適用於任何網址。 – InternetSeriousBusiness 2012-08-08 12:55:09

+0

這很好,我可以使用'RewriteCond%{HTTP_USER_AGENT}!(Mozilla)',它只允許那些瀏覽器用戶代理/非機器人 – chiappa 2016-12-28 15:50:59

-1

我只想讓一個具體的用戶代理,而不是試圖阻止所有

什麼您需要考慮的是,某些漫遊器(特別是「更大」的更突出的漫遊器)將使用多個用戶代理來訪問您的站點。 例如,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) 

和我真的沒有事件在談論谷歌Plus和由谷歌使用許多其它的機器人。

雅虎和其他人也一樣。

就在本週我們的公司(Incapsula)推出了Botopedia.org - a Community-Sourced bot directory。它是100%免費且全部開放的,您可以使用它爲您希望允許的所有漫遊器查找完整的用戶代理列表。

如果需要,它還具有用於Bot驗證的反向IP功能,因爲正如我們的recent study of Fake Googlebot visits所示,一些垃圾郵件發送者甚至網絡攻擊者將使用合法的bot簽名來緩解他們進入您的網站的方式。

希望這會有所幫助。

7

我只想讓一個具體的用戶代理,而不是試圖 塊的所有

這裏是我的配置,只允許wget的:

SetEnvIf User-Agent .*Wget* wget 

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

如果你不想使用mode_rewrite,用Apache 2.4你可以使用類似這樣的東西:

<Location /> 
       AuthType Basic 
       AuthName "Enter Login and Password to Enter" 
       AuthUserFile /home/content/html/.htpasswd 
       <If "%{HTTP_USER_AGENT} == 'myuseragent'"> 
       Require all granted 
       </If> 
       <Else> 
       Require valid-user 
       Require ip 12.34.567.89 
       </Else> 
</Location> 
相關問題