2017-11-16 7 views
1

URLにnominのファイルの未圧縮バージョンを提供したいとします。例えば.htaccessクエリ文字列に基づいてファイルの未使用バージョン(存在する場合)へのURLを書き換えます。

私が要求した場合、:

http://localhost/foo/bar.min.js?nomin 

私は、ファイル受信する必要があります

http://localhost/foo/bar.js 

をしかし、私はファイルが存在する場合にのみ発生します。

これは私が私の.htaccessファイルに持っているものです。

RewriteCond %{QUERY_STRING} nomin 
RewriteCond %{REQUEST_URI} (.*)\.min(\..*) 
RewriteCond %{DOCUMENT_ROOT}/$1$2 -f 
RewriteRule (.*)\.min(\..*) $1$2 [L,QSA,NC] 

しかし、それは動作しません。ファイルが存在するかどうかを確認する行を削除した場合:

RewriteCond %{DOCUMENT_ROOT}/$1$2 -f 

これは動作しますが、存在しないファイルを指している可能性があります。

は、私が試した:

  • スラッシュRewriteCond %{DOCUMENT_ROOT}$1$2 -fを削除します。
  • REQUEST_URIを使用すると、それほど意味をなさないにもかかわらず、RewriteCond %{REQUEST_URI}/$1$2 -f(スラッシュの有無にかかわらず)を使用します。
  • 全体をマッチングし、唯一の ".min" 私が間違っているのは何

    RewriteCond $0 (.*)\.min(\..*) 
    RewriteCond $1$2 -f 
    

を除いた部分をチェックしますか?


サイド質問:は私のRewriteCondと私は二回(.*)\.min(\..*)を記述する必要はありませんようRewriteRuleを変更する方法はありますか?

答えて

1

これはあなたのために働く必要があります。

RewriteCond %{QUERY_STRING} ^nomin$ [NC] 
RewriteCond %{REQUEST_URI} ^(.+)\.min(\.[^.]+)$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%1%2 -f 
RewriteRule^%1%2 [L,NC] 

使用%1%2代わりの$1、それは動作しませんRewriteCond

+0

からキャプチャされた値のため$2。 2行目では、 '$ 1'と' $ 2'を使います。彼らは未設定ですか?それは、私がその 'REQUEST_URI'部分を持っていた理由の1つです - その2つの変数を設定することです。また、どのディレクトリ/サブディレクトリでも動作する必要があります。 –

+0

'RewriteRule'自体に' $ 1'と '$ 2'が設定されているので、それらは設定されていません。 – anubhava

+0

'.htaccess'は、それが入っているディレクトリやサブディレクトリのファイルに対する要求を変更しませんか? –

関連する問題