web-dev-qa-db-ja.com

サーバー名がwww-static.example.comの場合、htaccess条件を設定します

Yslowを改善するために、Cookieのないサブドメインが必要です。

Htaccessで魔女のホスト名が使用されていることを確認できますか

私の場合、www-static.example.comが呼び出されたら、設定したい

AddDefaultCharset UTF-8
ServerSignature Off
Options -Indexes
FileETag none

<IfModule mod_headers.c>
    Header unset ETag
    Header unset Cookie
    Header unset Set-Cookie
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive on
</IfModule>

<FilesMatch "\.(ico|jpg|jpeg|jpe|png|gif)$">
    ExpiresDefault "access plus 2 years"
</FilesMatch>

<IfModule mod_expires.c>
    ExpiresByType image/x-icon "access plus 2 years"
    ExpiresByType image/ico "access plus 2 years"
    ExpiresByType image/gif "access plus 2 years"
    ExpiresByType image/jpg "access plus 2 years"
    ExpiresByType image/jpe "access plus 2 years"
    ExpiresByType image/jpeg "access plus 2 years"
    ExpiresByType image/png "access plus 2 years"
</IfModule>

しかし、www.example.comにアクセスするとき、これを設定したくありません

Apache 2.4以降では、要求されたホスト名をテストするApache式を使用して、ディレクティブのブロック全体を<If>ブロックに配置してみることができます。

例えば:

<If "%{HTTP_Host} == 'www-static.example.com'">

# :
# Directives go here...
# :

</If>

既存のディレクティブに関するいくつかの注意事項:

<IfModule mod_headers.c>
    Header unset ETag
    Header unset Cookie
    Header unset Set-Cookie
</IfModule>

すべてのブロックを<IfModule>ラッパーでラップする必要はないようです。

Cookierequestヘッダーであるため、RequestHeaderresponseに適用)ではなく、代わりにHeaderディレクティブを使用する必要があります。ヘッダー)。ただし、そもそもこのドメインにCookieを設定するべきではなかったので、これは不要であるはずです(そして、そもそもCookieのないドメインを持つという点を打ち負かします)。同様に、Set-Cookieは最初から設定されるべきではなかったため、設定を解除する必要はありません。

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

親構成のmod_rewriteディレクティブをオーバーライドする意図がない限り、これは不要に思えますか?

<IfModule mod_expires.c>
    ExpiresActive on
</IfModule>

<FilesMatch "\.(ico|jpg|jpeg|jpe|png|gif)$">
    ExpiresDefault "access plus 2 years"
</FilesMatch>

<IfModule mod_expires.c>
    ExpiresByType image/x-icon "access plus 2 years"
    ExpiresByType image/ico "access plus 2 years"
    ExpiresByType image/gif "access plus 2 years"
    ExpiresByType image/jpg "access plus 2 years"
    ExpiresByType image/jpe "access plus 2 years"
    ExpiresByType image/jpeg "access plus 2 years"
    ExpiresByType image/png "access plus 2 years"
</IfModule>

<IfModule>コンテナの内側と外側の両方にmod_expiresディレクティブがあります-これは実際には意味がありません。さらに、ファイル拡張子用のExpiresDefaultディレクティブがあり、より具体的なExpiresByTypeディレクティブですでにカバーされています。 ExpiresDefaultは、このホストから提供される他の静的リソースのデフォルトとして使用する必要があります。

ちなみに、jpg/jpeg/jpeファイルの正しいmimeタイプはimage/jpegです。したがって、他の2つの関連するmimeタイプ(image/jpgimage/jpe)は冗長です-サーバーはとにかくこれらの1つだけを返すので、サーバーが送信しているHTTP応答を確認して再確認できますバック。

したがって、mod_expiresディレクティブは次のように記述する必要があります。

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/x-icon "access plus 2 years"
    ExpiresByType image/ico "access plus 2 years"
    ExpiresByType image/gif "access plus 2 years"
    ExpiresByType image/jpeg "access plus 2 years"
    ExpiresByType image/png "access plus 2 years"
    ExpiresDefault "access plus 2 years"
</IfModule>

すべての静的リソースが「アクセスプラス2年」になる場合は、ExpiresDefaultディレクティブのみが厳密に必要です。

2
MrWhite