2011-06-28 7 views
0

は、私は別の場所にCSSファイルを書き換える私のhtaccessファイルに次の行があります。のmod_rewriteの.htaccessの問題

RewriteCond {REQUEST_FILENAME} !-f [NC] OR 
RewriteCond {REQUEST_FILENAME} !-d [NC] 
RewriteRule ^\\/?(.*)\.(css|js)$ public/$2/$1.$2 [L,NC,NE] 

をしかし、サイトがファイルをロードしようとすると、設定ミスのerrerがあります。実際の問題は$ 1と$ 2の間のドットです。私は、サーバーがファイルを見つけると無限ループになると思います。

誰もがそのエラーの理由を知っていますか?

答えて

2

私はこの構文の一部を見てからしばらくしていましたが、私はORが括弧内に入ると考えました。つまり、それはあなたの問題の一部です。両方ともRewriteCondの条件が真であることが必要です。また、ファイルが実際に存在する必要があります。ファイルが見つからない場合は、とにかく無限ループに入ります。別のアプローチは、次のようになります。前RewriteCondディレクティブに

RewriteRule ^public/(css|js)/ - [NC,L] 

public/cssまたはpublic/jsで何も書き換えられないますよう、関係なく、それがあるかどうかの。

また、ディレクトリ単位のコンテキスト(つまり、.htaccess)では、RewriteRuleの値がスラッシュで始まらないことに注意してください。それはあなたの問題の原因ではありませんが、それはあなたにいくつかの文字を保存し、あなたの正規表現を読むのが簡単になります。

+0

ありがとうございます!それはそれを解決しました! – mightyplow

0

リダイレクトしているディレクトリも正規表現を満たしているため、無限ループに陥ります。

+0

ええ。私はそんなことを考えました。少なくとも私はどこを見るかを知っています。 – mightyplow

2

は、無限ループを避けるために、このようなあなたのルールを書く:先に

RewriteRule ^(?!public/)(.*)\.(css|js)$ public/$2/$1.$2 [L,NC] 

負の外観は、あなたのための無限ループを防ぐことができます。

+0

でも他の解決策よりも "もっと美しい" =) – mightyplow