もとのルータとは異なり、RewriteRouter はサブディレクトリ内でも使用可能です。
RewriteRouter がベース URL を検出し、適切に設定します。例えば
index.php
をどこかのサブディレクトリに
/projects/myapp/index.php
のように配置した場合、
rewrite base (ベース URL) は /projects/myapp
に設定されます。
パスがルートにマッチするか調べる際に、この文字列がパスから取り除かれます。
これにより、いろいろな可能性を考えてルートを用意する必要がなくなります。
ルート 'user/:username'
は、
http://localhost/projects/myapp/user/martel
および
http://example.com/user/martel
の両方にマッチするのです。
![]() |
注意 |
---|---|
この処理は大文字小文字を区別します。そのため、 URL とファイルシステムのサブディレクトリ名が確実に一致する必要があります (たとえ Windows マシンであっても同様です)。大文字小文字が一致しなかった場合は noRoute アクションがコールされます。 |
rewrite base の検出に失敗する場合は、 RewriteRouter クラスのメソッド setRewriteBase を使用して ベースパスを上書き指定することができます。
$router->setRewriteBase('/projects/myapp');
![]() |
注意 |
---|---|
この処理は、たいていの場合は不要です。 これを使用することは推奨しません。なぜなら、 コードを別の場所に移動させたときにはこの内容も変更しなければならず、 それを管理するためにまたひとつ新たな設定項目が必要になってしまうからです。 |