11

ファイルのキャッシュ制御ヘッダーを設定しています。max-age=86400すべて.css.js、およびその他すべてに設定したいmax-age=3600

<FilesMatch "\.(css|js)$">
    Header append Cache-Control max-age=86400
</FilesMatch>

<FilesMatch "???">
    Header append Cache-Control max-age=3600
</FilesMatch>

\.(css|js)$一致を反転するためにどの正規表現を記述すればよいかわかりません。それとも、これを行う他の方法がありますか?

更新します。この質問の回答に基づいて、私はうまくいく解決策を見つけました:

<FilesMatch "(?<!\.css|\.js)$">
    Header append Cache-Control max-age=3600
</FilesMatch>

\.残念ながら、括弧の外にドットを残す方法が見つかりません。しかし、それでもこの解決策は私にとっては問題ありません。

補足として、他のすべてのファイルには、ファイル名がまったくないファイルが含まれますhttp://example.com/

4

3 に答える 3

8

この質問の回答に基づいて、私はうまくいく解決策を見つけました:

<FilesMatch "(?<!\.css|\.js)$">
    Header append Cache-Control max-age=3600
</FilesMatch>

残念ながら\.、角かっこの外にドットを残す方法を見つけることができません。しかし、それでもこの解決策は私にとっては問題ありません。

于 2012-11-20T02:27:55.947 に答える
3

文字列の最後まで実際のファイル拡張子(ドットを含まない最後の部分文字列)を確認する必要があります

.+\.(?!(css|js)$)[^\.]+?$

説明:

  • .+\.文字列全体を貪欲に検索して、最後のドットを見つけます。
  • (?!(css|js)$).cssいずれかをスキップするか.js、行末まで終了します(ただし、たとえば保持します.jsx
  • [^\.]+?$拡張部分を取得します(文字列の最後までドットはありません)
于 2012-10-17T08:41:00.943 に答える
1

これを試すことができます。

.+?\.(?!(css$|js$)).+

最初のグループ.+?はファイル名を取得し、2 番目の否定先読みグループ?!(css$|js$)は、ファイルの末尾が css または js でないことを確認します。これは、.css または .js 拡張子を持たないファイルのみに一致します。最初と最後の を置き換えることができます。許可されているファイル名の文字に基づいた文字クラスを使用します。

編集: これは test.cssx または test.jxabc と一致します

于 2012-10-17T03:36:27.030 に答える