RewriteRule с флагом [L] останавливает кеширование?

Я использую программное обеспечение для управления сервером Plesk с Apache и Nginx. Я установил в apache и nginx заголовок с истекшим сроком действия для файлов javascript сроком на один год. Это работает. Я вижу один год для «истекает» в заголовке.

Теперь я хочу получить доступ к файлам javascript и php с перезаписью (без перенаправления).

АПАЧ

      ExpiresActive On
ExpiresByType text/javascript A31556952

RewriteEngine On
RewriteRule fake/(.+\.(?:js|php))$ original/$1 [L]

НГИНКС

      location ~* ^/(.*\.js)$ {
    try_files $uri @fallback;

    expires 1y;
    add_header Cache-Control "public";
}

Это RewriteRule работает. Я могу получить доступ к этим файлам, но заголовок «expires» в «fake/file.js» исчез. Что я делаю не так?

example.com/original/file.js = срок действия истекает через один год.

example.com/fake/file.js = нет заголовка для срока действия

РЕШЕНИЕ Все статические файлы обычно обрабатываются NGINX, а не Apache. Итак, установите в apache эту строку для javascript, дайте ей кеш.

Набор заголовков Cache-Control "max-age=31556952, общедоступный"

Флаг [L] в RewriteRule должен остановить обработку статических файлов nginx, а ExpiresByType игнорируется.

1 ответ

почему статические файлы вообще не обрабатываются nginx?

Потому что/fake/file.jsбольше не является «статическим файлом» (он не существует), поэтому передается в Apache, где он внутренне перезаписывается для получения требуемого ответа.

       ExpiresByType text/javascript A31556952

text/javascriptможет быть неправильным MIME-типом для ответов JavaScript на вашем сервере . Вам необходимо подтвердить, какой тип mime (т.Content-Typeзаголовок) ваш сервер отправляет обратно эти ответы, но обычно это будетapplication/javascriptвместо этого в наши дни. Другими словами:

      ExpiresByType application/javascript A31556952

Чтобы уточнить, mod_expiresExpiresByTypeустанавливает заголовки ответа HTTP и .Cache-Control: max-ageимеет приоритет во всех современных браузерах.Expiresна самом деле предназначен только для поддержки устаревших версий.

Флаг [L] в RewriteRule должен остановить обработку статических файлов nginx.

The Lфлаг просто останавливает текущий проход механизма перезаписи на Apache. Сами по себе эти директивы не влияют на Nginx (который, похоже, действует как внешний прокси).

Другие вопросы по тегам