Как сделать условную защиту паролем .htaccess - PullRequest
5 голосов
/ 10 марта 2011

Я пытаюсь защитить паролем определенный URL с помощью .htaccess.Различные URL-адреса указывают на одни и те же файлы, но имеют разную работу.Теперь мне нужно защитить паролем только один URL.Я пытаюсь сделать это с помощью setenvif, но это не похоже на работу.Возможно, я не до конца понимаю назначение или использование модуля apache setenv.

Это мой код, который не работает

SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" protecturl
<IfDefine protecturl>
  Require valid-user
  AuthName "Please enter your name and password"
  AuthType Basic
  AuthUserFile .htpasswd
</IfDefine>

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Я наконец понял это.Мне действительно пришлось использовать движок mod_rewrite.Я был полон решимости найти решение, которое не требовало от меня создания дополнительных файлов или каталогов.

Те же файлы, без дополнительных каталогов, один .htaccess:

# Case we are in the protected area!
RewriteCond %{REQUEST_FILENAME} index.php [OR]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^(\/){1}$
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^(\/){1}$
RewriteCond %{HTTP_HOST} ^(protected)\.mydomain\.com$
RewriteRule ^(.*)$ admin.php%{REQUEST_URI} [L]

#default rewrite
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

#only protect access to admin.php which is a symlink to index.php
<FilesMatch "admin.php">
  AuthUserFile .htpasswd
  AuthName EnterPassword
  AuthType Basic
  require valid-user
</FilesMatch>
3 голосов
/ 28 февраля 2012

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

# allow facebook external hit
SetEnvIf user-agent "facebookexternalhit/1.1" allowthis
# disallow some other stuff
SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" !allowthis

AuthType Basic
AuthName "dev access"
AuthUserFile .htpasswd
Require valid-user

Allow from allowthis=1
Satisfy Any

IfDefine работает с определениями, которые не совпадают с переменными окружения.

Цитата из apache docs :

Аргумент имя-параметра является определением, заданным в командной строке httpd через -Dparameter-, во время запуска сервера.

0 голосов
/ 10 марта 2011

Не может быть напрямую напрямую возможно, но не могли бы вы иметь другой защищенный паролем каталог, с которым связан исходный каталог? Вы можете использовать mod_rewrite для перенаправления соответствующих запросов в защищенный паролем каталог.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.myhost.tld$
RewriteRule ^/foo/(.*)$ /bar/linkeddir/$1
...