「Apache Module mod rewrite」の版間の差分

提供: 雑廉堂Wiki
(RewriteBaseディレクティブ)
(RewriteBaseディレクティブ)
50行目: 50行目:
 
このディレクティブは、次の条件のいずれかが当てはまる場合を除いて、ディレクトリ単位(htaccess)コンテキストの置換で相対パスを使用する場合に必要です。
 
このディレクティブは、次の条件のいずれかが当てはまる場合を除いて、ディレクトリ単位(htaccess)コンテキストの置換で相対パスを使用する場合に必要です。
  
    元の要求と置換は、DocumentRootの下にあります(別名などの別の手段で到達可能ではありません)。
+
*元の要求と置換は、DocumentRootの下にあります(別名などの別の手段で到達可能ではありません)。
    RewriteRuleを含むディレクトリへのファイルシステムパスには、相対置換の接尾辞が付いています。これは、サーバー上のURLパスとしても有効です(これはまれです)。
+
*RewriteRuleを含むディレクトリへのファイルシステムパスには、相対置換の接尾辞が付いています。これは、サーバー上のURLパスとしても有効です(これはまれです)。
    Apache HTTP Server 2.4.16以降では、リクエストが別名またはmod_userdirを使用してマップされている場合、このディレクティブは省略できます。
+
*Apache HTTP Server 2.4.16以降では、リクエストが別名またはmod_userdirを使用してマップされている場合、このディレクティブは省略できます。
  
 
次の例では、リソースがドキュメントルートからの相対パスではないため、RewriteBaseはhttp://example.com/opt/myapp-1.2.3/welcome.htmlへの書き換えを避けるために必要です。この設定ミスにより、通常、サーバはドキュメントルートの下に "opt"ディレクトリを探すでしょう。
 
次の例では、リソースがドキュメントルートからの相対パスではないため、RewriteBaseはhttp://example.com/opt/myapp-1.2.3/welcome.htmlへの書き換えを避けるために必要です。この設定ミスにより、通常、サーバはドキュメントルートの下に "opt"ディレクトリを探すでしょう。

2018年3月18日 (日) 18:42時点における版

概要

mod_rewriteモジュールは、PCRE正規表現パーサーに基づいたルールベースのリライティングエンジンを使用して、要求されたURLを即座に書き換えます。 デフォルトでは、mod_rewriteはURLをファイルシステムのパスにマップします。 ただし、あるURLを別のURLにリダイレクトする場合や、内部プロキシフェッチを呼び出す場合にも使用できます。

mod_rewriteは無制限のルールを使用してURLを操作するための柔軟で強力な方法を提供します。 各ルールには、サーバー変数、環境変数、HTTPヘッダー、またはタイムスタンプに基づいてURLを書き換えることができるように、ルール条件を無制限に追加できます。

mod_rewriteは、path-infoセクションを含む完全なURLパス上で動作します。 書き換えルールは、httpd.confまたは.htaccessで呼び出すことができます。 書き換えルールによって生成されるパスには、クエリ文字列を含めることができます。また、内部サブ処理、外部要求リダイレクト、または内部プロキシスループットにつながる可能性があります。

詳細、議論、および例は、詳細なmod_rewriteのマニュアルに記載されています。

ロギング

mod_rewriteは、trace1〜trace8ログ・レベルでのアクションの詳細なロギングを提供します。 ログレベルは、LogLevelディレクティブを使用してmod_rewrite専用に設定できます。レベルデバッグまで、アクションはログに記録されませんが、trace8は実質的にすべてのアクションが記録されることを意味します。

mod_rewriteに高いトレースログレベルを使用すると、Apache HTTP Serverの速度が大幅に低下します。 デバッグにのみtrace2以上のログレベルを使用してください。


LogLevel alert reqrite:trace3


RewriteLog

mod_rewriteの以前のバージョンに精通している人は、間違いなくRewriteLogとRewriteLogLevelディレクティブを探しているでしょう。 この機能は、上記の新しいモジュールごとのログ設定に完全に置き換えられました。

mod_rewrite固有のログメッセージだけを取得するには、ログファイルをgrepを通してパイプします。

tail -f error_log | fgrep 'rewrite:'

RewriteBaseディレクティブ

説明:ディレクトリごとの書き換えのベースURLを設定します。

構文:RewriteBase URLパス

デフォルト:なし

コンテキスト:Directory、.htaccess

上書き:FileInfo

ステータス:拡張機能

モジュール:mod_rewrite

RewriteBaseディレクティブは、相対パスで置き換えられるディレクトリ単位(htaccess)のRewriteRuleディレクティブに使用されるURLプレフィックスを指定します。

このディレクティブは、次の条件のいずれかが当てはまる場合を除いて、ディレクトリ単位(htaccess)コンテキストの置換で相対パスを使用する場合に必要です。

  • 元の要求と置換は、DocumentRootの下にあります(別名などの別の手段で到達可能ではありません)。
  • RewriteRuleを含むディレクトリへのファイルシステムパスには、相対置換の接尾辞が付いています。これは、サーバー上のURLパスとしても有効です(これはまれです)。
  • Apache HTTP Server 2.4.16以降では、リクエストが別名またはmod_userdirを使用してマップされている場合、このディレクティブは省略できます。

次の例では、リソースがドキュメントルートからの相対パスではないため、RewriteBaseはhttp://example.com/opt/myapp-1.2.3/welcome.htmlへの書き換えを避けるために必要です。この設定ミスにより、通常、サーバはドキュメントルートの下に "opt"ディレクトリを探すでしょう。

DocumentRoot "/var/www/example.com" AliasMatch "^ / myapp" "/opt/myapp-1.2.3" <ディレクトリ "/opt/myapp-1.2.3">

   RewriteEngineをオンにする
   RewriteBase "/ myapp /"
   RewriteRule "^ index \ .html $" "welcome.html"

</ Directory>