Apache 正在监听端口 80 并将所有内容重定向到 https,这由 stunnel 处理。如果我输入身份验证,它会在进行身份验证之前重定向。有办法处理这个问题吗?
Listen 80
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^(.*) https://%{HTTP_HOST}$1
<Directory /*>
AuthType Basic
AuthName "Stooges Web Site: Login with email address"
AuthLDAPURL ldap://localhost:389/o=stooges?mail
require valid-user
</Directory>
</VirtualHost>
更新:我使用 stunnel 而不是 apache,因为 apache 无法处理带有 ssl 的 websockets,而 stunnel 可以。
答案1
仅当有人访问 HTTP 服务器的起始页时才会发生身份验证,但由于您已将所有人从 HTTP 站点重定向到 HTTPS 站点,因此您永远无法到达该目录。
最好的办法是将身份验证放在 HTTPS 站点的配置中,但如果你不能这样做,我认为你应该能够使用 RewriteCond 来实现它。我自己还没有真正尝试过,但这里有一个例子可以让你开始:
Listen 80
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{AUTH_TYPE} Basic
RewriteRule ^(.*) https://%{HTTP_HOST}$1
<Directory /*>
AuthType Basic
AuthName "Stooges Web Site: Login with email address"
AuthLDAPURL ldap://localhost:389/o=stooges?mail
require valid-user
</Directory>
</VirtualHost>
可能只需要一个包含重定向到 HTTPS 主机的 index.html 就会容易得多......