我有基于 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
不幸的是,这样的配置会为所有 URL 启用 Kerberos AuthType。我尝试将前 3 行
SetEnvIf Request_URI ^/$ rootdir=1
Allow from env=rootdir
Satisfy Any
在主块之后,但它没有帮助我。
答案1
我将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>
这解决了我的问题。
答案2
如何执行此操作取决于您使用的是 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>
块。
答案3
尝试 AllowOverride None 它将禁用 .htacess