「Apache Module mod rewrite」の版間の差分
(同じ利用者による、間の9版が非表示) | |||
33行目: | 33行目: | ||
=== RewriteBaseディレクティブ === | === RewriteBaseディレクティブ === | ||
{| style="border:1px solid grey ;border: gray solid 1px;margin-top: 1em;margin-bottom: 1em;" | |||
|'''説明:''' | |||
|ディレクトリごとの書き換えのベースURLを設定します。 | |||
|- | |||
|'''構文:''' | |||
|RewriteBase ''URLパス'' | |||
|- | |||
|'''デフォルト:''' | |||
|なし | |||
|- | |||
|'''コンテキスト:''' | |||
|Directory、.htaccess | |||
|- | |||
|'''上書き:''' | |||
|FileInfo | |||
|- | |||
|'''ステータス:''' | |||
|拡張機能 | |||
|- | |||
|'''モジュール:''' | |||
|mod_rewrite | |||
|} | |||
<code>RewriteBase</code>ディレクティブは、相対パスの置き換えるディレクトリ毎(htaccess)の<code>RewriteRule</code>ディレクティブで使用されるURL接頭辞を指定します。 | |||
このディレクティブは、次のいずれかの条件に当てはまる場合を除いて、ディレクトリ単位の(htaccess)コンテキストでの置換で、相対パスを使用する時に必要とされます。 | |||
* | * 元のリクエストと置換先が<code>DocumentRoot</code>の下にある場合(<code>Alias</code>のような他の手段によって到達可能であるのに対して)。 | ||
* | * 相対的な置換の後に続く、<code>RewriteRule</code>を含むディレクトリへのファイルシステムパスは、サーバーのURLとしても有効である場合(これはまれです)。 | ||
*Apache | * Apache HTTPサーバー 2.4.16以降では、リクエストが<code>Alias</code>やあるいは、<code>mod_userdir</code>によってマップされている時、このディレクティブは省略可能です。 | ||
下の例では、リソースがドキュメントルートに対して相対的ではないので、<nowiki>http://example.com/opt/myapp-1.2.3/welcome.html</nowiki>に書き換えるのを避けるために<code>RewriteBase</code>は必要です。 この設定が間違っていると、通常、サーバーは"opt"ディレクトリをドキュメントルートの下に探しにいこうとします。 | |||
2018年3月20日 (火) 13:12時点における最新版
概要
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
の下にある場合(Alias
のような他の手段によって到達可能であるのに対して)。 - 相対的な置換の後に続く、
RewriteRule
を含むディレクトリへのファイルシステムパスは、サーバーのURLとしても有効である場合(これはまれです)。 - Apache HTTPサーバー 2.4.16以降では、リクエストが
Alias
やあるいは、mod_userdir
によってマップされている時、このディレクティブは省略可能です。
下の例では、リソースがドキュメントルートに対して相対的ではないので、http://example.com/opt/myapp-1.2.3/welcome.htmlに書き換えるのを避けるためにRewriteBase
は必要です。 この設定が間違っていると、通常、サーバーは"opt"ディレクトリをドキュメントルートの下に探しにいこうとします。
DocumentRoot "/var/www/example.com" AliasMatch "^/myapp" "/opt/myapp-1.2.3" <Directory "/opt/myapp-1.2.3"> RewriteEngine On RewriteBase "/myapp/" RewriteRule "^index\.html$" "welcome.html" </Directory>