あなたはおそらく、単にあなたのサブディレクトリに同じ.htaccess
を作成し、ちょうどRewriteBase
コマンドを削除することでOKである必要があり、複数の.htaccess
ファイル
- それは本当に、ほとんどの場合で必要とされない、と書き換える場合を除き、ドキュメントルート上のファイルへのパスを正しく設定すると、かなり混乱する可能性があります。ここで
は、サンプルのセットアップです:そのセットアップを
+- DOCROOT/index.php :
<?php echo $_SERVER['PATH_INFO'];
+- DOCROOT/.htaccess :
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php/$1
+- DOCROOT/subdir/index.php :
<?php echo $_SERVER['PATH_INFO'];
+- DOCROOT/.htaccess :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php/$1
、あなたはhttp://server/some-path
を呼び出し、/some-path
がエコーバック、またはhttp://server/subdir/other-path
を呼び出し、/other-path
はエコーバックを確認することができます。ただ、最後の書き換えチェーン(面白いですのみ1を)DUPとを追加 - あなたはまた、ドキュメントルートにあるメイン.htaccess
ファイル内のサブディレクトリの書き換えルールを追加することができます
シングル.htaccess
RewriteCond
から最初にサブディレクトリのみに制限されます。上記のあなたの例を取ると
、それは次のようになります(私も冗長RewriteEngine On
コマンドを削除するにはliberyを取ってきました)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteBase/
RewriteCond %{REQUEST_URI} subdirectory/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^subdirectory/(member-([0-9]+)-([a-zA-Z0-9\-]+))/?$ subdirectory/team.php?id=$2&%{QUERY_STRING} [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(member-([0-9]+)-([a-zA-Z0-9\-]+))/?$ team.php?id=$2&%{QUERY_STRING} [NC,L]
。要求がサブディレクトリに来ると、最初のルールでキャッチされ、サブディレクトリコンテキストを使用して書き換えられ、[L]
フラグはmod_rewrite停止処理を引き起こします。それ以外の場合は、メインルーティングを行います。この設定は、私の好みに合わせて少し複雑すぎます。おそらく、追加の.htaccessファイルを用意しています。
サブディレクトリ内に別のhtaccessファイルを追加する必要がありますか? –
Ahh ..あなたがやっていると仮定していましたが、 'RewriteBase'を削除することはサブディレクトリの' .htaccess'で行うべきです。実際には、サブディレクトリの書き換えルールをメインディレクトリに追加することができます。私は詳細を私の答えを更新しました – Guss
あなたが仮定しているものはcorreecgtです、実際に私は別のhtaccessファイルをサブディレクトリに持っていますが、私は 'RewriteBase'コマンドを削除しました。私は実際のhtaccessがかなり長いので、htaccessを別に保つことを好むです –