###前提・実現したいこと
最終的にやりたいことは「特定のIPからのアクセスだけ403にせずリライトする」ですが、事象解説のため簡略例で説明させていただきます。
httpd.conf に対して、後述の Deny(for Apa2.2) または Require(for Apa2.4)設定を記載して、上位ディレクトリレベルで全てのアクセスをACLで拒否しています。
この状態でRewriteRule設定を入れた場合でも、ACLが有効化されたままで403エラーとなることを実現したいと考えています。
###発生している問題・エラーメッセージ
<結果>
ブラウザからアクセスした結果、
・Apache2.2では403エラー(正常にACLが効いている)
・Apache2.4では302でリダイレクトでgoogleに飛ばされる(ACLが効いていない)
となりました。
<問題点>
・Apache2.4では、本来deniedとなるはずのアクセスが許可されてしまい、
リライトが機能してgoogleへ302リダイレクトされてしまいます。
・つまり2.2とは逆で、ACL設定よりもRewriteRuleの設定が優先されているように見えます。
・ApacheのDirectory仕様ではディレクトリの階層が上のほうから処理されるため、本来であればACL設定が効いて403エラーとなるはずです。
###該当のソースコード
<設定内容> ▼Apache2.4 <Directory /> Require all denied </Directory> <Directory /tmp/test> <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ http://www.google.com [R=302,L] </IfModule> </Directory> ▼Apache2.2 <Directory /> Deny from all </Directory> <Directory /tmp/test> <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ http://www.google.com [R=302,L] </IfModule> </Directory>
###試したこと
・2.2と2.4でConf設定の差異などを調べたのですが、関連するようなものはありませんでした。
・Apache2.4からアクセス制御の認証仕様が変更されたため、
Orderを書くのではなくRequireになりましたが、その関係では? と疑っていますが
Web上にも同様の知見がなく、1日中Confをいろいろ変更して試してみたのですが解決していない状況です。
・<Location />
Require all denied
</Location>
でも結果は同じでした(2.2は403で、2.4は302)。
・RHバンドル版ではなくソースコンパイル版のApacheですので、RH社への問い合わせができず、自己解決するしかない状況です。
お力添えいただけますと幸甚です。
###補足情報(言語/FW/ツール等のバージョンなど)
OS:Linux version 2.6.32-220.4.2.el6.x86_64 (mockbuild@x86-003.build.bos.redhat.com) (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Mon Feb 6 16:39:28 EST 2012
Apache:2.4.10、2.2.16
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/19 03:56