我想为服务器状态输出 (mod_status) 强制使用 https 和基本身份验证。如果我启用 auth 并且用户请求http://site/server-status
apache 首先请求 pass,然后重定向到 httpS,然后再次请求 pass。
这个问题类似于 Apache - Redirect to https before AUTH and force https with apache before .htpasswd 但我无法让它工作,因为我们不是在谈论通用文件夹,而是在谈论位置结构。
我的配置(很快)如下:
<Location /server-status>
SSLRequireSSL
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /server-status
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ - [E=nossl]
RewriteRule (.*) https://site/server-status} [R=301,L]
</IfModule>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost ip6-localhost
Allow from 1.2.3.0/24
Allow from env=nossl
AuthUserFile /etc/httpd/status-htpasswd
AuthName "Password protected"
AuthType Basic
Require valid-user
Satisfy any
</Location>
我假设Allow from env=nossl
应该允许每个RewriteCond %{HTTPS} off
人和服务器端口 80,然后强制它重定向但它不起作用。
请注意,我不想强制对整个站点进行 SSL,而只是 /server-status。如果重要的话,服务器有多个站点。
我究竟做错了什么?谢谢你。
有没有办法可以将 HTTP 和 HTTPS 分成两个虚拟主机?您可以仅将 Auth 放在 HTTPS 上并将 HTTP 重定向到 HTTPS。完整的配置看起来像这样。
我没有太多运气去
RewriteCond %{HTTPS} off
工作 - 相反,对我有用的是另一个建议(来自这个问题)是将 Auth 行移动到一个
<VirtualHost *:443>
部分中。