使用 Apache 2.2,如果未经身份验证的用户使用 http,我想使用 mod_rewrite 将他们重定向到 https。是否有指令或条件可以测试用户是否经过身份验证?
/foo
例如,我可以在我的服务器上设置受限位置:-
<Location "/foo/">
Order deny,allow
# Deny everyone, until authenticated...
Deny from all
# Authentication mechanism
AuthType Basic
AuthName "Members only"
# AuthBasicProvider ...
# ... Other authentication stuff here.
# Users must be valid.
Require valid-user
# Logged-in users authorised to view child URLs:
Satisfy any
# If not SSL, respond with HTTP-redirect
RewriteCond ${HTTPS} off
RewriteRule /foo/?(.*)$ https://${SERVER_NAME}/foo/$2 [R=301,L]
# SSL enforcement.
SSLOptions FakeBasicAuth StrictRequire
SSLRequireSSL
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
</Location>
这里的问题是每个子文件夹中的每个文件都将被加密。这完全没有必要,但我认为没有理由禁止它。我希望RewriteRule
只在身份验证期间触发。如果用户已经获得查看文件夹的授权,那么我不希望RewriteRule
触发。这可能吗?
编辑:
我这里没有使用任何前端 HTML。这仅使用 Apache 的内置目录浏览界面及其内置身份验证机制。我的<Directory>
配置是:
<Directory ~ "/foo/">
Order allow,deny
Allow from all
AllowOverride None
Options +Indexes +FollowSymLinks +Includes +MultiViews
IndexOptions +FancyIndexing
IndexOptions +XHTML
IndexOptions NameWidth=*
IndexOptions +TrackModified
IndexOptions +SuppressHTMLPreamble
IndexOptions +FoldersFirst
IndexOptions +IgnoreCase
IndexOptions Type=text/html
</Directory>
答案1
您似乎对基本身份验证的工作原理感到困惑。基本身份验证要求对每个请求进行密码查找,例如,加载包含 100 张图片的 html 页面需要处理至少 100 个身份验证请求。具体来说,如果不使用 SSL/TLS,则凭据将以纯文本形式传递,可能会被拦截。当您使用基于 cookie 的身份验证时,仅为登录页面启用 https 是有意义的(例如http://finesec.com/sitedefensor.html)