Apache 2.2重定向到SSL*然后*做auth(使用解决方案<但它是废话吗?)

Tim*_*tts 7 apache mod-rewrite apache2 basic-authentication apache2.2

似乎是apache的地方所以这里去:)

古老的问题:我如何重定向HTTP-> HTTPS,然后只有在HTTPS时才进行身份验证?

哦 - 我想把它大部分放在一个可以包含在多个<directory>或<location>块中的片段中,所以没有基于虚拟主机级别随机路径的重写...

好吧,这就是我所拥有的似乎有用的东西:

在VirtualHost块的顶部

# Set ssl_off environment variable 
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=ssl]
Run Code Online (Sandbox Code Playgroud)

在位置或目录块中

RewriteEngine on
# Case 1 redirect port 80 SSL
RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_PORT} =80
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]

AuthType Basic
AuthBasicProvider external
AuthExternal auth_pam
AuthName "My Underpants"
AuthzUnixgroup on
Order Deny,Allow
Deny from all
Allow from env=!ssl
Satisfy any
Require group nice-users
Run Code Online (Sandbox Code Playgroud)

加号

所有这些条件都可以将Require's抽象为一个片段文件,以便在每个位置包含在一行中

它修复了强制每个位置的SSL和身份验证,因此错误的可能性更小

血淋淋的地狱,这很难直观!我所知道的一切可能都很脆弱......

有没有更好的方法(不是我发现的......)?

如果有任何严重的缺陷,将非常欢迎评论:)

如果Apache有一个合理的配置语法与泛型,Aside Life会更容易

<If expression> </ If>

可以在任何地方使用的块.它有一些特殊的大小写块,比如IfModule,然后你就有了像RewriteCond这样的特殊情况条件(如果你不习惯它就很难理解).

干杯,

蒂姆

Cor*_*son 3

如果你想强制整个网站使用 https,你可以使用VirtualHost指令,然后就很简单了:

<VirtualHost *:80>
    ServerName example.com

    RedirectMatch (.*) https://example.com$1

</VirtualHost>

<VirtualHost *:443>
    ServerName example.com

    ...
    ...
    ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)