22

PrettyURL(私の場合はCakePHP)をRewriteRulesに大きく依存しているアプリケーションで.htaccess、この書き換えから特定のディレクトリを除外するようにディレクティブを正しく設定するにはどうすればよいですか?あれは:

/appRoot/.htaccess
         app/
         static/

デフォルトでは、へのすべてのリクエスト/appRoot/*は、によってピックアップされるように書き換えられapp/webroot/index.php、そこで分析され、対応するコントローラーアクションが呼び出されます。これは、次のこれらのディレクティブによって実行され.htaccessます。

RewriteBase /appRoot

RewriteRule ^$ app/webroot/     [L]
RewriteRule (.*) app/webroot/$1 [L]

static/のようないくつかのディレクトリをこの書き換えから除外したいと思います。Cake RewriteRulesのにこれを試してみました:

RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]

これまでのところ、リクエストは書き直されていませんが、一致してはならない正当なCakeリクエストも含め、すべての^(static|otherDir).*$リクエストがスキップされています。

これらのルールのいくつかのバリエーションを試しましたが、希望どおりに機能させることができません。

4

3 に答える 3

6

そして正解はイイイイイイイイイイイイイイイイイイイイイイイイイイイイイ.

RewriteRule   ^(a|bunch|of|old|directories).* - [NC,L]

# all other requests will be forwarded to Cake
RewriteRule   ^$   app/webroot/   [L]
RewriteRule   (.*) app/webroot/$1 [L]

これらのディレクティブが配置されていても、ルートディレクトリの index.php ファイルが最初に呼び出された理由はまだわかりません。現在は

/appRoot/app/views/pages/home.ctp

Cake を通じても処理されます。これが整っていれば、これもうまくいったと思います(マイクの提案をわずかに変更したバージョンで、テストされていません):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
于 2008-08-07T06:09:54.337 に答える
1

前のルールから[L]を削除します。

RewriteBase /appRoot

RewriteRule ^$ app/webroot/    
RewriteRule (.*) app/webroot/$1

[L]は、「ここで書き換えプロセスを停止し、これ以上書き換えルールを適用しない」ことを意味します。

于 2008-08-06T08:19:29.677 に答える
1

次のルールに条件を適用するのではなく、次のように否定を使用してください (いくつかのバリエーションを使用すると、.htaccess ルールを覚えるのが苦手なので、フラグが間違っている可能性があります)。

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
于 2008-08-06T08:26:56.667 に答える