我已经阅读了一些关于如何重定向到SSL的帖子,还有一些关于如何确保网站使用www子域/规范名称的帖子,以及一些关于如何设置Basic Auth的帖子。以下是我现在在.htaccess文件中的内容:
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteEngine on RewriteCond %{HTTP_HOST} !(^www\.site\.com*)$ RewriteRule (.*) https://www.site.com$1 [R=301,L] AuthName "Locked" AuthUserFile "/home/.htpasswd" AuthType Basic require valid-user
它工作得很好,但我想优化它。我的问题包括:
答案 0 :(得分:5)
#1
轰!这很有效。
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.askapache.com"
ErrorDocument 403 https://www.askapache.com/admin/
请参阅:
只需将上面的块放在.htaccess的顶部,这是我的:
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.askapache.com"
ErrorDocument 403 https://www.askapache.com/admin/
AuthType Digest
AuthName "Protected By AskApache"
AuthDigestDomain / https://www.askapache.com/admin/
AuthUserFile /home/askapache/.htpasswd-digest
Require valid-user
Satisfy All
答案 1 :(得分:3)
如果您使用的是Apache 2.4,则还可以使用configuration sections避免双重身份验证。
# Redirect to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
# Authenticate users only when using HTTPS
<If "%{HTTPS} == 'on'">
AuthType Basic
AuthName "Special things"
AuthUserFile /etc/blah.htpasswd
Require valid-user
</If>
我在answer here中提供了更精确的版本。
答案 2 :(得分:2)
对于#1:
仅在正在收听*:443
的VirtualHost上设置验证说明。您应该有2个VirtualHost,一个在端口80上侦听,另一个在端口443上。在非SSL通信上使用AuthType Basic
是一个大问题,用户名和密码只是base64编码,所以它在清除在您的http服务器上使用的每个请求(甚至图像或css)!
答案 3 :(得分:1)
这是我的解决方案,以防止以前重写的双重身份验证,如:
RewriteCond %{HTTPS} ^off$ [NC]
RewriteCond %{REQUEST_URI} /administrator/*
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]
<If "%{HTTPS} == 'on'">
AuthType Basic
AuthName "Authorization Required"
AuthUserFile /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Users
AuthGroupFile /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Groups
#require valid-user
require group Webmins
</If>
<Else>
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
</Else>
即使我不是真的需要这种条件 - 如果Rewrite由于某种原因不能正常工作,那么它就更多地作为额外的安全性后备。
答案 4 :(得分:0)
感谢上面的回复,它有助于创建组合的https和www解决方案。我唯一担心的是,如果某些情况下没有触发auth,允许某人在没有凭据的情况下进行访问。我不确定有没有,但也许你们聪明的人可能会说不出来。
此代码使用.htaccess文件夹身份验证将非www重定向到www,http重定向到https。
这是您要保护的目录中htaccess文件的内容:
RewriteEngine on
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/foldername/$1 [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/foldername/$1 [L,R=301]
# Apache 2.4 If
<If "%{HTTPS} == 'on' && %{HTTP_HOST} =~ /www/">
AuthType Basic
AuthName "Protected folder"
AuthUserFile "/home/etc/.htpasswds/public_html/foldername/passwd"
require valid-user
</If>