Разрешение обмена FB на защищенном паролем сайте - PullRequest
2 голосов
/ 27 июля 2011

У меня есть сайт в разработке, который защищен паролем с помощью apache htpasswd.

Как можно исключить запрос, исходящий из общего ресурса FB, чтобы он не был защищен паролем?

Это означает, что я все еще хочу, чтобы сайт был защищен паролем, когда пользователь пытается получить доступ через браузер, но если запрос приходит от общего пинга FB, он должен разрешить его.что в пинге FB есть пользовательский агент facebookexternalhit / 1.1, но я не уверен, как это реализовать.

Спасибо,
Tee

1 Ответ

7 голосов
/ 28 июля 2011

В этом ответе предполагается, что вы используете Apache 2.1 или более позднюю версию:

С модулем mod_authz_host вы можете осуществлять контроль доступа по имени хоста в .htaccess или в разделе или ваш файл httpd.conf, например:

<Location />
  Allow from apache.org
  Allow from .net example.edu 
</Location>

Обратите внимание, что здесь вы можете использовать частичные доменные имена, поэтому в этом примере www.apache.org будет разрешен доступ.

Для обеспечениячто у вас установлена ​​mod_authz_host, проверьте строку, похожую на следующую в вашем httpd.conf:

LoadModule authz_host_module modules/mod_authz_host.so

Недостатком этого является то, что он будет выполнять обратный поиск для каждого доступа, который может илиможет не быть проблемой производительности для вас.

Другой вариант - ограничение с помощью User-Agent.Однако это ненадежный метод, потому что User-Agent может быть очень легко подделан.Но в зависимости от вашего уровня паранойи это может быть оправдано: D

Чтобы ограничиться User-Agent, вам необходимо убедиться, что вы загружаете модуль mod_setenvif в дополнение к модулю mod_authz_host,Проверьте строку, аналогичную следующей в вашем httpd.conf:

LoadModule setenvif_module modules/mod_setenvif.so

Затем вы можете настроить управление доступом в , или .htaccess следующим образом:

SetEnvIf User-Agent ^facebookexternalhit/1\.1 let_me_in
<Location />
  Order Deny,Allow
  Deny from all
  Allow from env=let_me_in
</Location> 
...