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这样的特殊情况条件(如果你不习惯它就很难理解).
干杯,
蒂姆
如果你想强制整个网站使用 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)