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 (который, похоже, действует как внешний прокси).