Si comme moi, vous tentez d’intégrer un plugin facebook like alors que votre site est en développement et que par conséquent vous décidez de bloquer l’accès par un htaccess / htpasswd à tout le monde sauf les valid user,
Vous êtes alors confronté au même problème.

Comment faire pour tester l’affichage du like sur votre profil sans temporairement enlever la limite d’accès ?

En cherchant un peu dans les doc apache / htaccess, j’ai découvert qu’il était possible de bloquer certain utilisateur mais d’autoriser des machine sur des ip spécifiées.

Seulement, en regardant mes logs apache, le scrapper de Facebook n’utilise pas tout le temps la même IP mais elle commence apparemment toujours par :
69.63.180.*

Il est possible d’autoriser une classe d’ip comme ceci :
69.63.180.0/255
Pour mon test avec Facebook ca ne marchait pas, j’ai donc décider de trouver un moyen d’autoriser seulement facebook en matchant le user agent de son scrapper.

C’est donc FAISABLE !

Le user-agent du scrapper de facebook est :

« facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) »

(http://developers.facebook.com/docs/reference/plugins/like)

Pour ce faire, il faut dans le fichier htaccess, définir une variable « d’environnement » qui correspondra aux user agent qui matcheront avec l’expression régulière donnée :

SetEnvIfNoCase User-Agent « .*(facebookexternalhit).* » AllowedAgent

Nous pourrions utiliser SetEnvIf (le ‘NoCase’ correspond à case insensitive)

Et il suffit ensuite d’ajouter la ligne :

allow from env=AllowedAgent

Dans mon cas, j’ai décidé de bloquer tout le monde SAUF soit un utilisateur enregistré, SOIT facebook.

Il faut alors coupler deux types de sécurités:

1/ Bloquer tout le monde : Deny from all

2/ Autoriser les utilisateurs enregistrés (contenus dans le fichier htpasswd) :

AuthUserFile /path/to/.htpasswd
AuthName « Veuillez vous identifier »
AuthType Basic
require user user1 user2 user3

3/ Autoriser le user agent spécifié :

allow from env=AllowedAgent

4/ Informer à Apache qu’il suffit que l’une des deux conditions soit vérifié pour donner un accès (soit un user, soit le userAgent) :

Satisfy any

Finalement, le fichier htaccess ressemblera à ça :

SetEnvIfNoCase User-Agent ".*(facebookexternalhit).*" AllowedAgent
AuthUserFile /path/to/.htpasswd
AuthName "Veuillez vous identifier"
AuthType Basic
Satisfy any
Order Deny,Allow
Deny from all
allow from env=AllowedAgent
require user user1 user2 user3

Mes sources : (à lire ! C’est interressant !!)

Les bases du htaccess : http://lebrument.free.fr/wordpress/wordpressfr/?p=50

Plus complet mais en anglais : http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/#security