如何仅在https上应用htaccess规则

时间:2014-07-19 22:38:18

标签: apache .htaccess

所以我在网站上有一个受保护的文件夹,其中包含强制https并使用基本身份验证的htaccess。问题是,如果我使用http去那里,它会在转移到https之前请求身份验证,然后再次请求身份验证。有没有办法让它在提示我之前转移到https?

这是htaccess:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://site.net/folder/$1 [R,L]
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/user/site.net/folder/.htpasswd
Require valid-user

更新:我决定实施自己的身份验证系统来绕过这个问题。

2 个答案:

答案 0 :(得分:1)

这是您只能显示一次身份验证的方法:

  1. 在从http重定向到https
  2. 的同时设置Cookie
  3. 设置Cookie时使用SetEnvIfNoCase禁用身份验证
  4. 您可以使用的代码:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteRule ^filder https://%{HTTP_HOST}/folder%{REQUEST_URI} [R,L,NC,CO=NO_AUTH:1:%{HTTP_HOST}]
    
    SetEnvIfNoCase COOKIE NO_AUTH=1 OKAY
    
    AuthType Basic
    AuthName "Dialog prompt"
    AuthUserFile /home/user/site.net/folder/.htpasswd
    Require valid-user
    Order allow,deny
    allow from all
    deny from env=OKAY
    Satisfy any
    

答案 1 :(得分:0)

如果您使用的是Apache 2.4,您显然可以在htaccess中使用条件结构:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

<If "%{HTTPS} == 'on'">
    AuthType basic
    AuthName "Private"
    AuthUserFile /path/to/passwordfile
    Require valid-user
</If>