https リダイレクトとパスワード要件とエラー ドキュメントの組み合わせによる Apache のシステム エラー

https リダイレクトとパスワード要件とエラー ドキュメントの組み合わせによる Apache のシステム エラー

Apache 2 vhostでは、次の構成になっています(私の場合、.htaccessドキュメントルート(簡単にするためにhttp:80とhttps:443は同じです))

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

http接続をhttpsにリダイレクトするためにさらに、

ErrorDocument 500 /error.php
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
ErrorDocument 402 /error.php
ErrorDocument 401 /error.php

カスタム エラー メッセージを生成します。3 番目の要素は、認証が必要な保護されたサブフォルダーです (.htaccessそのフォルダー内)。

AuthType Basic
AuthName "Test"
AuthUserFile  /some/path/to/passwords
Require user joe

誰かが取得しようとするとhttp://example.com/protectedfolder、クライアントは302 Foundリダイレクトされた応答を受け取ります。https://example.com/error.php

一方で、

  • https://example.com/protectedfolder予想どおりにカスタム (つまり、error.php によって生成される) につながります401
  • http://example.com/publicfolder302は にリダイレクトされhttps://example.com/publicfolder、次に に301永続的にリダイレクトされhttps://example.com/publicfolder/、最後に (DirectoryIndex が無効になっているため) カスタマイズされたエラーが発生します403。予想どおりです。
  • また、 によって が発生し、カスタマイズされたも予想どおりにhttp://example.com/nonexistent発生します。302https://example.com/nonexistent404
  • 設定を無効にするとErrorDocument 401、クエリはすぐにhttp://example.com/protectedfolder発生し401、https にリダイレクトされることはありません。

Apache error.log には具体的なエントリはありませんが、Auth 要件が Rewrite の前に評価され、ErrorDocument が呼び出され、それが誤って http のままになっているために問題が発生しているようです。

http://example.com/protectedfolder望ましい効果、つまりへのリダイレクトが発生しhttps://example.com/protectedfolder、リダイレクトされた URL のみが (カスタマイズされた) を発生さ せるには、何を変更する必要がありますか401?

答え1

httpから(への無条件リダイレクトを行うためhttps誰もがウェブサイト上の公開情報にアクセスできるようにしたい場合は、これは悪い考えです。:80、BTW) の場合は、とに別々のホスト エントリを作成し:443、エントリを空のフォルダーなどにポイントする必要があります:80。そうすれば、mod_auth が mod_rewrite と競合することはなくなります。

関連情報