У меня есть аутентификация на основе Kerberos, и я хочу отключить ее только для корневого URL: http://mysite.com/
. И я хочу, чтобы он продолжал нормально работать на любой другой странице, например http://mysite.com/page1
.
У меня в .htaccess есть такие вещи:
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user
Я хочу отключить его только для корневого URL. В качестве обходного пути можно отключить, используя .htaccess
в конфигурации виртуального хоста. К сожалению, я не знаю, как это сделать.
Часть моего vhost.conf:
<Directory /home/user/www/current/public/>
Options -MultiViews +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
UPD. Я использую Apache / 2.2.3 (Linux / SUSE)
Я пробовал использовать такую версию .htaccess:
SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user
К сожалению, такая конфигурация включает Kerberos AuthType для всех URL-адресов. Я попытался разместить первые 3 строчки
SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any
после основного блока, но мне это не помогло.
я переехал mod_auth_kerb
конфигурацию в vhost.conf. И использовал Location
директива для отключения авторизации на некоторых URL.
# root_url
<LocationMatch "(^\/$|^$)">
Satisfy Any
</LocationMatch>
<Location /incidents/last>
Satisfy Any
</Location>
<Directory /home/user/www/>
Options -MultiViews +FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd On
Krb5KeyTab /etc/httpd/httpd.keytab
require valid-user
</Directory>
Это решило мою проблему.
Как вы это сделаете, будет зависеть от того, используете ли вы Apache 2.2 или Apache 2.4. Я на самом деле не тестировал их, поэтому вполне возможно, что он вообще не будет работать или может потребоваться некоторая настройка.
Для 2.2 мы можем использовать SetEnvIf
установить переменную, если они запрашивают /
и использовать Allow from
и Satisfy any
для контроля доступа. Вся ваша существующая конфигурация должна оставаться как есть:
SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any
В версии 2.4 есть изменения в аутентификация и авторизация. Теперь у нас есть набор <Require>
блоки, которые вы можете обернуть вокруг любого контроля доступа для точной настройки авторизации:
SetEnvIf Request_URI ^/$ rootdir=1
<RequireAny>
AuthType Kerberos
AuthName "Domain login"
KrbAuthRealms DOMAIN.COM
KrbMethodK5Passwd on
Krb5KeyTab /etc/httpd/httpd.keytab
Require valid-user
Require env rootdir=1
</RequireAny>
В <RequireAny>
блок означает, что кто угодно из Require
директивы должны совпадать для успешной авторизации. Это также <RequireAll>
и <RequireNone>
блоки.
Попробуйте AllowOverride None Это отключит .htaccess