我已经设置了一个私人网站,只有少数人可以通过互联网访问。我想设置一个基本身份验证和https的组合。
到目前为止,如果我直接输入https://blah.com/location1
,我的一切正常。但是我需要的是是将apache重定向http://blah.com/location1
到https://blah.com/location1
然后进行基本身份验证,即我不希望在重定向之前完成基本身份验证。目前这是我在apache配置上的内容。
WSGIScriptAlias /site /path/to/site/apache/site.wsgi
<Directory /path/to/site/apache>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Location /site>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
AuthType Basic
AuthName "Site login"
AuthUserFile /path/to/site/.htpasswd
Require valid-user
</Location>
注意:我只需要/site
的身份验证。因此,我应该能够访问http://blah.com/site1
,http://blah.com/site2
而无需身份验证。
答案 0 :(得分:1)
将HTTP请求“转换”为HTTPS请求的重写规则的问题在于它们不会阻止通过普通HTTP发出第一个请求(因为您重定向到HTTPS URL)。
您可以做的是将您的网站拆分为两个虚拟主机:一个用于HTTP,另一个用于HTTPS。
在HTTP虚拟主机上,如果需要,实施重写,但在所有情况下都禁止访问<Location /location1>
(仅进行重写)。
在HTTPS虚拟主机上,使用基本身份验证配置<Location /location1>
。
答案 1 :(得分:0)
我在这里回复了Apache 2.2 redirect to SSL *then* do auth (with solution < but is it crap?),一个使用SSLRequireSSL
的解决方案,以及一个ErrorDocument 403
返回包含JavaScript的html 403错误页面,该页面会将页面重新加载到HTTPS ...最好的解决方案我发现没有将配置文件分成两部分,一部分由端口HTTP上的VirtualHost
加载,另一部分端口HTTPS上。