我想强制https和服务器状态输出(mod_status)的基本身份validation。 如果我启用身份validation,用户请求http://site/server-status Apache首先要求通过,然后redirect到httpS,然后再次要求通过。
这个问题类似于Apache – 在AUTH之前redirect到https, 在.htpasswd之前强制https与apache,但是我无法得到它的工作,因为我们讲的不是通用文件夹,而是位置结构。
我的configuration(简称)如下:
<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的每个人,然后强制它redirect,但它不起作用。
请注意,我不想强制SSL整个站点,但只是/服务器状态。 如果重要,服务器有几个站点。
我究竟做错了什么? 谢谢。
有没有办法可以将HTTP和HTTPS分离为两个虚拟主机? 您可以仅将Auth设置为HTTPS,并将HTTPredirect至HTTPS。 完整的configuration看起来像这样。
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com Redirect / https://example.com/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName example.com ServerAlias www.example.com . . . </VirtualHost> </IfModule>
我没有太多的运气让RewriteCond %{HTTPS} off工作 – 相反,对我来说,工作是
RewriteCond %{SERVER_PORT} !443
另一个build议( 从这个问题 )将移动Auth行到<VirtualHost *:443>部分。