30

これは私の .htaccess です:

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

AuthUserFile /etc/hi
AuthName "hi"
AuthType Basic
require valid-user

http を使用したユーザー認証を要求します。つまり、パスワードはプレーン テキストで送信されます。その後、https バージョンにリダイレクトし、パスワードを再度尋ねます。

どうすれば修正できますか?

4

9 に答える 9

12

どうもありがとう、イスタドール!

私の Apache はバージョン 2.2 (Synology NAS DSM 5.1) であるため、次の 2 つは動作しません。

RewriteOptions Inherit
IfVersion

それら(およびバージョン> = 2.4のセクション)を取り出した後。すべてがうまくいき始めました。

このトピックには多くの提案があり、私はそれらを試すのに 2 日間費やしました。

しかし、これだけが私のために働きます。

これが私がしたことです:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

AuthType Basic
AuthName "private area"
AuthUserFile /path/to/file/.htdigest

Order Deny,Allow
Deny from all
Satisfy Any
Allow from env=!HTTPS
Require valid-user

そのため、Apache 2.2、Synology DSM 5.1 で動作することが確認されています。

于 2015-05-10T07:56:44.177 に答える
2

私は Apache 2.2 を実行していますが、上記の解決策はどれもうまくいきませんでした。ここで回避策を見つけました。基本的に、SSLRequireSSL を設定し、ErrorDocument で何らかのスクリプト言語を使用して、ユーザーを HTTPS に転送する必要があります。残念ながら、私の場合、これはサーバー上の特定のファイルにアクセスする場合にのみ機能し、ドメインだけが提供されている場合は機能しません。これが私がしたことです:

AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /my/path/to/.htpasswd
#Require valid-user

<FilesMatch "(^(?!ssl.php).*)">
        SSLRequireSSL
        ErrorDocument 403 /ssl.php
        Require valid-user
</FilesMatch>

FileMatch の正規表現は、Apache に ssl.php を除くすべてのファイルについて SSLRequireSSL を指示し、ユーザーが SSL なしでアクセスしようとすると、ユーザーを ssl.php に転送します。

私の ssl.php は次のようになります。

if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "" || $_SERVER['HTTPS'] == "off")
{
        $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: $redirect");
        exit;
}

今何が起こるか:

最後のポイントは、私が満足していないことです。誰かがその解決策を持っている場合は、それについて聞いてうれしいです. この問題を解決しようとしたこと:

  • 空の文字列にも明示的に一致するように、正規表現を (^$)|(^(?!ssl.php).*) に変更しました。動作しませんでした
  • index.php に空文字列を書き換える書き換えルールを追加しました。どちらも機能しません。
于 2015-12-17T09:41:20.653 に答える
2

クライアントの webapp は、クライアントの webuser ディレクトリにインストールされています。承認は mod_rewrite ルール ( https://serverfault.com/a/443185/253111 ) の前に処理され、受け入れられた回答を機能させることができなかったため、mod_rewrite はオプションではないように思われました。

最終的に、明示的に SSL を要求し、403 および 404 エラー ドキュメントとして HTTPS 経由で webapp のルートを使用しました。したがって、HTTP (許可されていないため、403) または存在しないページ (404) を介して任意のページにアクセスすると、ie にリダイレクトされます。https://DOMAIN.TLD/~WEBUSER/admin .

これは、コメントにいくつかの追加情報を含む .htaccess ファイルです。

### INFO: Rewrites and redirects are handled after authorisation
### @link https://serverfault.com/a/443185/253111

### INFO: Log out of a HTPASSWD session
### This was not always possible, but Firefox and Chrome seem to end sessions
### when a new one is trying to be using ie.:
### https://logout:logout@DOMAIN.TLD/~WEBUSER/
### @link http://stackoverflow.com/a/1163884/328272

### FORCE SSL: Explicitly require the SSL certificate of a certain domain to
### disallow unsigned certificates, etc. ErrorDocument commands are used to
### redirect the user to an HTTPS URL.
### @link http://forum.powweb.com/showthread.php?t=61566
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire  %{HTTP_HOST} eq "DOMAIN.TLD"

### HTPASSWD AUTHENTICATION
AuthUserFile /var/www/vhosts/DOMAIN.TLD/web_users/WEBUSER/.htpasswd
AuthType Basic
AuthName "Hello"
Require valid-user

### ERROR DOCUMENTS: Redirect user in case of a 403 / 404.
ErrorDocument 403 https://DOMAIN.TLD/~WEBUSER/admin
ErrorDocument 404 https://DOMAIN.TLD/~WEBUSER/admin
于 2015-02-17T11:55:00.437 に答える
1

Molomby のソリューションは 2.4 以降で機能しますが、現在の Debian バージョン 2.2.22 では機能しません。

Ben と Chris Heald のソリューションも 2.2.22 では機能しませんでしたが、これは順序と満足の構成が異なるためでした。これらの設定は 2.4 で変更されており、ソリューションは 2.4 以降と互換性がないようです (リダイレクトは機能しますが、ブラウザは認証情報を要求せずに不正なエラーを表示するだけです)。

2.4 より下と上のバージョンで機能するはずの両方のソリューションの組み合わせを次に示します。

RewriteEngine on
RewriteOptions Inherit # rewrite rules from parent directories
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

AuthType Digest
AuthName "private area"
AuthDigestProvider file
AuthUserFile /path/to/file/.htdigest

<IfVersion < 2.4>
    Order Deny,Allow
    Deny from all
    Satisfy Any # reset this to 'All' in custom <Files> and <Directory> directives that block access
    Allow from env=!HTTPS
    Require valid-user
</IfVersion>
<IfVersion >= 2.4>
    <If "%{HTTPS} == 'on'">
        AuthMerging And
        Require valid-user
    </If>
</IfVersion>

要件: mod_rewrite、mod_auth、mod_digest、mod_version

于 2015-02-19T05:36:21.263 に答える