似乎是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>