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

古老的问题:如何重定向HTTP-> HTTPS,然后仅在使用HTTPS的情况下进行身份验证?

哦-我想将其大部分包含在一个可以包含在多个或块中的单个代码段中,因此没有基于虚拟主机级别随机路径的重写...

好吧,这就是我所拥有的似乎有效的方法:

在VirtualHost块顶部

# Set ssl_off environment variable
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=ssl]

在位置或目录块中
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

加号

可以将Require的所有栏抽象为一个片段文件,以将其包含在每个位置的一行中

它修复了对每个位置强制使用SSL和身份验证的问题,从而减少了出错的机会

负号

血腥的 hell ,这很难直觉!我所知道的可能会变得脆弱...

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

对于是否存在任何严重缺陷,欢迎发表评论:)

除了
如果Apache具有通用的合理配置语法,那么生活将变得更加轻松



可以在任何地方使用的块。它具有某些特殊情况下的块,例如IfModule,然后具有特殊情况下的条件条件,例如RewriteCond(如果不习惯,很难理解)。

干杯,

提姆

最佳答案

如果要强制将整个站点强制为https,则可以使用 VirtualHost 指令,然后非常简单:

<VirtualHost *:80>
    ServerName example.com

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

</VirtualHost>

<VirtualHost *:443>
    ServerName example.com

    ...
    ...
    ...
</VirtualHost>

10-07 19:42
查看更多