2011-12-22 17 views
3

PHPアプリケーションで、ブートストラップファイル経由でファイルをルーティングするhtaccess書き換えセットアップがあります。要するに、目的はwww.domain.com/view/key/value/key/valueのようなURLを取ることです。ビューはそれに応じてルーティングされ、キー/値のペアはブートストラップで書いた関数を介して利用可能になりますビューに。すべてはうまくいきました...htaccess書き換えルールからファイルを除外する

つまり、私はajax-yのものをやるまでです。私はajaxDispatcher.phpという単一のファイルを通してすべてのajaxクエリをルーティングしています。私がそれをしたとき、htaccess(正しく)がリクエストを受け取り、ブートストラップを使ってそれを不適切にルーティングしました。同様に、.ico、.cssなどの不要なファイルをルーティングしようとしていました。

ファイル拡張子ルーティングの例外を発見しましたが、.htaccessは単一のファイルの書き換えルールを無視できませんでしたファイルajaxDispatcher.php。私のコードが立つのはここです:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/ajaxDispatcher.php$ $0 [L] 
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?route=$1 [L] 

にはどうすればいいだけajaxDispatcherのルーティングルールを無視するの.htaccessのですか?

+0

はajaxDispatcher行を削除し、それが動作するはずです –

答えて

5

あなたはのRewriteCondブロックの上に新しいルールを移動する必要があります

RewriteRule ^/?ajaxDispatcher.php$ - [L] 

私は、彼らが意図していると仮定しているためにそれ以外の場合はRewriteConditionsは、もはや拡張するRewriteRuleをカバーしていません。

もう一つの選択肢は、もちろん他のRewriteCondにそれを回している:

RewriteCond %{SCRIPT_NAME} !ajaxDispatcher 

または最終のRewriteRule (?!ajaxDispatcher.php)にアサーションとしてそれを注入します。

注文の事は最高のServerFaultの上で説明されて:https://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as

2

あなたが表示されたコードからajaxDispatcher.php行を削除した場合、それが動作するはずですが - ので!-f!-dルールのため、実際には存在したファイルへのリクエストは、書き換えrukeから除外されます。

関連する問題