19

Apache2の.htaccessファイルを使用していくつかのファイルをキャッシュしようとしています。特定のフォルダを他の何よりも長くキャッシュしたいので、次のようにFilesMatchディレクティブを使用しようとしています。

<FilesMatch "skins(.*)\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>

/skins/ディレクトリとそのサブディレクトリにあるすべての画像ファイルをキャッシュできるようにしたいと思っています。ただし、正規表現を完全に機能させることはできません。Apacheはそれを完全に無視します。

<FilesMatch>.htaccessファイル内のフォルダをどのように照合しますか?

乾杯、
マット

4

3 に答える 3

27

FilesMatchはファイル名とのみ一致する必要があります。.htaccessディレクトリ内にファイルを配置すると、次のskinsようになります。

<FilesMatch "\.(jpg|png|gif)">
    ExpiresDefault A2592000
</FilesMatch>

または、でhttpd.conf、次を使用できます。

<Directory path_to_the_skins_dir>
    <FilesMatch "\.(jpg|png|gif)">
        ExpiresDefault A2592000
    </FilesMatch>
</Directory>

幸運を。

于 2009-05-16T13:16:33.210 に答える
17

<Directory><Location>.htaccessでは許可されていませんが…</p >

「コンテキスト」(httpd.confだけでなく)でも許可され<If>いる.htaccessものを使用できます…こちらも参照してください。これにより、ベースパス拡張機能など、RegExpが把握できるその他のものを照合できます…</ p>

テスト済みで動作中:

<If "%{REQUEST_URI} =~ m#^/_stats/.*\.(jpg|png|css|js)#">
    Header unset ETag
    FileETag None

    ExpiresActive On
    ExpiresDefault "access plus 1 day"
</If>

注: _stats私のリライトURLであり、着信URLではありません(それがあなたの側に何らかの違いをもたらす場合)、なぜマッチングがそれに対して機能するのかわかりません... </ p>

#/は、正規表現としてマークするために使用するのではなく、正規表現を示すための「<em>gate」の外側の違いです。(私/はその文字通りの意味で使用する必要があるので、これは私が/'sをエスケープする必要から私を救います)。

于 2017-12-20T14:57:53.793 に答える
10

Directoryまた、コマンドは多くの共有ホスティングLocationでは機能しません。解決策は、ターゲットサブフォルダーで.htaccess作成し、そこでコマンドを使用することです。.htaccessFilesMatch

于 2016-08-22T18:25:42.040 に答える