blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_4 memo other

[memo] .htaccess の RewriteRule で Basic 認証が効かない問題 (0x21e)

[memo] .htaccess の RewriteRule で Basic 認証が効かない問題 (0x21e)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x21e 回。

先日ハマった、上位階層の「 .htaccess 」で「 RewriteRule 」を設定している場合に、下位階層の「 .htaccess 」で設定した「 AuthType Basic 」( ベーシック認証 ) が効かない問題の解決策をメモする。


構成



ファイル「 .htaccess 」を設置した Web サーバのディレクトリ構成は次のようになっています。


Web Document Root
+--------+
| htdocs | [ .htaccess ]
+----+---+
| RewriteEngine On
| RewriteBase /
| RewriteRule ^index\.php$ - [L]
| RewriteCond %{REQUEST_FILENAME} !-f
| RewriteCond %{REQUEST_FILENAME} !-d
| RewriteRule . /index.php [L]
|

|
+-------------+--------+--------+----- ... .
| | | |
+----+-----+ +---+--+ +---+--+ +---+--+
| this dir | | dir1 | | dir2 | | dir3 | ... .
+----------+ +------+ +------+ +------+
[ .htaccess ]
AuthType Basic
AuthName "Basic Authorization"
AuthUserFile /home/your/dir/.htpasswd
require valid-user
order deny,allow



ドキュメントルートの「 htdocs 」直下には「 WordPress 」のための「 .htaccess 」が予め設置されています。

今回 Basic 認証を掛けるのはディレクトリ「 this dir 」だけなので、僕はその中に 認証のための「 .htaceess 」を設置しました。

しかし、Web ブラウザから該当のディレクトリ「 this dir 」にアクセスすると、上位階層の「 RewriteRule 」が発動して、認証のためのダイアログボックスが表示されません。

認証のためのダイアログボックスが表示されないので、Basic 認証の利用ができない状態です。


RewriteRule の除外設定が効かない



「 RewriteRule 」からの除外設定を忘れていたことに気が付いた ( というよりも、最初は上位階層の .htaccess の存在を知らなかった ) ので、「 RewriteCond 」による設定や「 RewriteEngine off 」等、いくつか除外のための記述を試しました。

しかし、認証のダイアログは表示されません。

「 Directory 」ディレクティブや「 Location 」ディレクティブも試しましたが、該当する Web サーバでは .htaccess によるオーバーライドが許可されていない様子です。

上位階層の .htaccess をリネームして無効化すれば Basic 認証は動作するので、「 ReriteRule 」との兼ね合いが原因であることは確かです。

しかし、その解決方法が分かりませんでした。


解決方法



問題の解決方法は ルートディレクトリに mod_rewrite、サブディレクトリに基本認証 で、認証要求ださずに404になるなど - ここはちょっと見せられない で見つけることが出来ました。

僕の環境では、結果として以下の記述をディレクトリ「 this dir 」の .htaccess に記述することで Basic 認証のダイアログが表示される様になりました。


ErrorDocument 401 "Unauthorized Access"
RewriteEngine off

AuthType Basic
AuthName "Basic Authorization"
AuthUserFile /home/your/dir/.htpasswd
require valid-user
order deny,allow



ポイントは 1 行目のディレクティブ「 ErrorDocument 」です。

動作の概要は、解決策のソースページ "Disable mod_rewrite for subdirectory - serverfault" のソースページ "Conflict Between Apache URL Rewriting and Basic Authentication - The Myriad Blog" にありました。

以下に Translation for oneself only of The Myriad Blog ( 自分のための翻訳 ) をメモします。


Apache URL Rewriting と Basic 認証の間の衝突


--- Posted by Peter Schultheiss on May 7th, 2009 at 04:04 pm ---

Apache のモジュール「 mod_rewrite 」はルールベースの書き換えエンジンを提供します。

それはほとんどの MVC フレームワーク (i.e. CakePHP や Zend Framework ) やコンテンツ管理ソリューション ( i.e. Drupal や WordPredd ) で利用されています。

書き換えエンジン ( mod_rewrite ) を利用する利点は次のとおりです:

  ・ Web サイトの URL はよりユーザの記憶に残ります
  ・ Web サイトの URL はよりサーチエンジンに適切になります
  ・ ファイルの拡張子を非表示にすることでサイト内部の動作をマスキングします

私は先日ベーシック .htaccess 認証で保護した場所でレガシーなアプリケーションの実行を必要としたときに問題に遭遇しました。

レガシーなアプリケーションはサブディレクトリに位置しています。

一般的に, あなたは .htaccess に次のコードの行を追加してリライトエンジンにディレクトリを無視する様に指示します.


RewriteEngine off



残念ながらこれは動作しません, 予想の通り.

ベーシック認証では, サーバは "401 Unauthorized ( 無許可 )" ヘッダを書いて, その後事前に定義されたパスに基づいてエラードキュメントを探します.

ほとんどの場合, あなたが保護したいディレクトリ内にエラードキュメントは存在しないので, その要求は投げられた 404 エラーでリライトエンジンによって処理されます.

この問題の解決方法はとても簡単です.

あなたは .htaccess ファイルにコードを 1 行追加して, Apache にエラードキュメントを無視するように指示します.

完了したら, コードはこのようになります:


ErrorDocument 401 "Unauthorized Access"

RewriteEngine off

AuthType Basic
AuthName "Administration"
require valid-user
AuthUserFile "/home/user/.htpasswds/public_html/admin/passwd"



うまくいけば, だれかのイライラを少し解消できると思います。


0x21e -> 0x21f へ



次回は、Perl のビット演算子に戻って「 ビットストリング 」を確認します。

参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index





















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
この記事へのコメント
本当に助かりました!
ありがとうございました><。
Posted by yoripon at 2019年10月04日 16:29
お役に立てて嬉しいです^ ^
Posted by セラ at 2019年10月04日 17:07
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲