1

mod_jk を使用して tomcat で実行されているアプリに接続するサイトを作成するように apache を構成しています。

https リクエストのみがアプリにアクセスするようにし、ポート 80 のすべての http リクエストに対して mod_rewrite を使用して 404 を返したいと考えています。

これがVirtualHost構成での私の試みです

<VirtualHost *:80>
  ServerName admin.app.com
  RewriteEngine On
  RewriteRule ^ [L,R=404]
</VirtualHost>

<VirtualHost *:443>
  ServerName admin.app.com
  SSLEngine On
  SSLCertificateFile /etc/apache2/ssl/bla.crt
  SSLCertificateKeyFile /etc/apache2/ssl/bla.key
  SSLCACertificateFile /etc/apache2/ssl/bla.ca
  SSLProtocol all
  SSLCipherSuite HIGHT:MEDIUM

  JkMount /myapp* 

</VirtualHost>

https://admin.app.com/myappを押すと、すべてがうまくいきます。Tomcat アプリにアクセスして、mod_jk と SSL 証明書が期待どおりに機能していることを確認できますが、http で行う URL 要求はすべて次のようになります。 // 期待していた 404 ではなく、400 の不正なリクエストを返します。

RewriteLog と RewriteLogLevel 3 を追加すると、次の出力が得られました

(2) init rewrite engine with requested uri /
(3) applying pattern '^' to uri '/'
(2) rewrite '/' -> '[L,R=404]'
(2) local path result: [L,R=404]
(2) init rewrite engine with requested uri /myapp/favicon.ico/
(3) applying pattern '^' to uri '/myapp/favicon.ico/'
(2) rewrite '/myapp/favicon.ico/' -> '[L,R=404]'
(2) local path result: [L,R=404]

これは、404 を返す必要があることを意味すると解釈します

私の質問は、ログがリクエストを 404 に正しく書き換えているように見えるのに、なぜ 400 Bad Request を受け取るのかということです。さらに、https 経由でのみサイトにアクセスできるようにすることに関するベスト プラクティスは何ですか。

4

1 に答える 1

4

問題はページが見つからないことではなく、ユーザーが禁止された要求を行っていることなので、コード 404 は使用しないでください。

代わりに、これを試してください:

RewriteRule ^ - [F]

次に、カスタム 403 エラー ページを使用して、保護された要求のみがこのパスに許可されることを説明できます。

于 2013-03-21T19:29:22.183 に答える