2012-03-02 15 views
1

私はjsファイルをつぶしキャッシュに使用私の.confファイルに次のように持っている:ここでの考え方はsite.com/js/するsite.com/js/123456/script.jsを書き換えることであるなぜRewriteCondによってRewriteRuleが処理されないのですか?

<Directory "/www/virtual/site/html/js/"> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^\d+\/(.+)$ $1 [L] 
</Directory> 

script.js

私は理解していないよ一部を記録書き換えを見れば、それがinteralリダイレクト... Shouldn後にスクリプトにするRewriteRuleを適用していることである(書き換えが正常に動作します)ファイルが存在するので、%{REQUEST_FILENAME} !-fはRewriteRuleを処理できませんか? (デザインによって)

リライトログ

[rid#2b607f8f2dc8/initial] (3) [perdir /www/virtual/site2/html/js/] add path info postfix: /www/virtual/site2/html/js/1234 -> /www/virtual/site2/html/js/1234/script.js 
[rid#2b607f8f2dc8/initial] (3) [perdir /www/virtual/site2/html/js/] strip per-dir prefix: /www/virtual/site2/html/js/1234/script.js -> 1234/script.js 
[rid#2b607f8f2dc8/initial] (3) [perdir /www/virtual/site2/html/js/] applying pattern '^\d+\/(.+)$' to uri '1234/script.js' 
[rid#2b607f8f2dc8/initial] (2) [perdir /www/virtual/site2/html/js/] rewrite '1234/script.js' -> 'script.js' 
[rid#2b607f8f2dc8/initial] (3) [perdir /www/virtual/site2/html/js/] add per-dir prefix: script.js -> /www/virtual/site2/html/js/script.js 
[rid#2b607f8f2dc8/initial] (2) [perdir /www/virtual/site2/html/js/] strip document_root prefix: /www/virtual/site2/html/js/script.js -> /js/script.js 
[rid#2b607f8f2dc8/initial] (1) [perdir /www/virtual/site2/html/js/] internal redirect with /js/script.js [INTERNAL REDIRECT] 
[rid#2b6073eb14a8/initial/redir#1] (3) [perdir /www/virtual/site2/html/js/] strip per-dir prefix: /www/virtual/site2/html/js/script.js -> script.js 
[rid#2b6073eb14a8/initial/redir#1] (3) [perdir /www/virtual/site2/html/js/] applying pattern '^\d+\/(.+)$' to uri 'script.js' 
[rid#2b6073eb14a8/initial/redir#1] (1) [perdir /www/virtual/site2/html/js/] pass through /www/virtual/site2/html/js/script.js 

答えて

2

のmod_rewriteは、URLが変化しなくなるまで、書き換えルールを適用し続けています。

1234/script.jsからscript.jsに初めてルールを適用しようとすると、パターン正規表現は一致せず、script.jsは「通過」されます。

これは動作する方法です。時には痛みを伴うこともありますが、mod_rewriteはもっと強力で便利です。

編集

mod_rewiteは最初RewriteCond年代を適用しようとする前に、RewriteRuleパターンをテストします。これは、RewriteCondで$ 0、$ 1などの逆参照を使用できるようにするためです。すべてのRewriteCondの後に置換文字列が作成されるので、バックプレフィックス%0、%1も使用できます。下の図も参照してください。

これは、ファイルが存在するかどうかをテストする前にパターンを適用しようとした理由です。それがするRewriteCondの%{REQUEST_FILENAME}に一致しない場合、パターンを適用しようとする理由

apache mod_rewrite flow

+0

私はそれが再びルールを適用することを得る...私は何を得ることはありませんすることです!-f。私の前提は、RewriteCond – Aknosis

+0

のためにパターンを試しても適用してはならないということです。上記の編集を参照してください。 – Gerben

+0

今、私は説明のおかげでそれを得る! – Aknosis

関連する問題