Как разрешить один URL, но ограничить другие с помощью htaccess - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь разрешить доступ к одному местоположению (файл , который не существует ) на моем сервере Apache 2.2.3 (Centos), чтобы иметь возможность реализовать прослушиватель PayPal ipn.Другие файлы должны быть защищены паролем.

Как разрешить доступ к одному местоположению без входа в систему?

Код ниже показывает то, что я пробовал до сих пор.

Директива местоположениявыбирает правильное местоположение (я проверил это, написав deny от всех к нему).

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

Я уже пытался поместить директиву location в каталог, но это приводит к синтаксической ошибке (даже если это допустимо для файловых директив), но я не могу использовать файловую директиву вместо этого местоположение одно, поскольку файл физически не существует.

<Directory /var/www/vhosts/somedomain.net/subdomains/p103.myproject/httpdocs/public>
Order Deny,Allow
 Options -Includes -ExecCGI
 SetEnv APPLICATION_ENV "development"
 AuthName "myproject"
 AuthType Basic
 AuthUserFile /var/www/vhosts/somedomain.net/subdomains/p103.myproject/.htpasswd
 AuthGroupFile /var/www/vhosts/somedomain.net/subdomains/p103.myproject/.htgroups
 Require group myproject
</Directory>
DocumentRoot /var/www/vhosts/somedomain.net/subdomains/p103.myproject/httpdocs/public
<Location "/ipn/sdsad8329ejslkdjasl">
 Order Deny,Allow
 Allow from all
 Satisfy Any
</Location>

Здесь ссылка на документацию: http://httpd.apache.org/docs/2.2/

1 Ответ

1 голос
/ 17 ноября 2011

Вы можете использовать SetEnvIf для сопоставления с Request_URI для установки переменной, а затем использовать комбинацию Satisfy any, Require group myproject и Allow.

Попробуйте что-то вроде этого:

DocumentRoot /var/www/vhosts/somedomain.net/subdomains/p103.myproject/httpdocs/public

# Here we check if the request is for something we don't need to authorize
SetEnvIf Request_URI ^/ipn/sdsad8329ejslkdjasl NO_AUTH_NEEDED=1

<Directory /var/www/vhosts/somedomain.net/subdomains/p103.myproject/httpdocs/public>
  Order Allow,Deny
  Options -Includes -ExecCGI
  SetEnv APPLICATION_ENV "development"
  AuthName "myproject"
  AuthType Basic
  AuthUserFile /var/www/vhosts/somedomain.net/subdomains/p103.myproject/.htpasswd
  AuthGroupFile /var/www/vhosts/somedomain.net/subdomains/p103.myproject/.htgroups

  # This makes it so one of the 2 is good enough
  Satisfy Any
  # We allow first, but only if the NO_AUTH_NEEDED is set
  Allow from env=NO_AUTH_NEEDED
  # Otherwise, require a login
  Require group myproject

</Directory>
...