2017-05-31 8 views

答えて

1

mod-rewrite句の変数SERVER_PROTOCOLと照合することができます。このルールを必ず最初のルールとしてください。禁止されたページがユーザーに表示できるように

RewriteEngine On 
RewriteCond %{SERVER_PROTOCOL} ^HTTP/1\.0$ 
RewriteCond %{REQUEST_URI} !^/path/to/403/document.html$ 
RewriteRule^- [F] 

!^/path/to/403/document.html$のための追加的な負のチェックがあります。それ以外の場合、再帰が発生します。

0

名前ベースの仮想ホストを使用していて、各仮想サーバーがでない場合は、別のIPアドレスを持つには、HTTP/1.0を使用して仮想ホストに接続することは技術的に不可能です。既定のサーバー(最初に定義された仮想サーバー)にのみアクセスできます。これはHTTP/1.0がHTTPの "Host"要求ヘッダーをサポートしていないためで、要求を処理する仮想ホストを「選択」するために、名前ベースの仮想ホストにHostヘッダーが必要なためです。ほとんどの場合、本当のHTTP/1.0リクエストに対するレスポンスは400 Bad Requestです。そのコードを有効にしても後でカスタムエラードキュメントを使用しようとすると(Apache core ErrorDocumentディレクティブを参照)、要求をブロックした結果は「無限ループ」になります。サーバーは403-Forbidden応答コードで応答し、カスタム403エラー文書を処理しようとします。しかし、これはすべてのリソース(カスタム403ページを含む)へのアクセスが拒否されるため、別の403エラーが発生します。したがって、サーバーは別の403エラーを生成し、それに応答しようとすると、別の403と別のものを作成します。これは、クライアントまたはサーバーが断念するまで続きます。 mod_rewriteので

SetEnvIf Request_Protocol HTTP/1\.0$ Bad_Req 
SetEnvIf Request_URI ^/path-to-your-custom-403-error-page\.html$ 
Allow_Bad_Req 
#Order Deny,Allow 
Deny from env=BadReq 
Allow from env=Allow_Bad_Req 

、何かのように:

RewriteCond %{THE_REQUEST} HTTP/1\.0$ 
RewriteCond %{REQUEST_URI} !^/path-to-your-custom-403-error-page\.html$ 

私のようなものをお勧めしたいです

関連する問題