帶標誌的重寫規則大號大號L停止記憶體?
我將伺服器管理軟體 plesk 與 apache 和 nginx 一起使用。我在 apache 和 nginx 中為 javascript 文件設置了一個過期的標頭一年。那行得通。我可以在標題中看到“過期”的一年。
現在我想通過重寫(無重定向)訪問 javascript 和 php 文件。
阿帕奇
ExpiresActive On ExpiresByType text/javascript A31556952 RewriteEngine On RewriteRule fake/(.+\.(?:js|php))$ original/$1 [L]
NGINX
location ~* ^/(.*\.js)$ { try_files $uri @fallback; expires 1y; add_header Cache-Control "public"; }
該 RewriteRule 正在工作。我可以訪問這些文件,但是“fake/file.js”中的“expires”標頭消失了。我究竟做錯了什麼?
example.com/original/file.js = 一年後到期
example.com/fake/file.js = 沒有過期標頭
解決方案 所有靜態文件通常由 NGINX 處理,而不是 apache。所以在 apache 中為 javascript 設置這一行給它一個記憶體。
標頭集 Cache-Control “max-age=31556952, public”
旗幟
$$ L $$在 RewriteRule 中必須停止 nginx 處理靜態文件,並且忽略 ExpiresByType。
為什麼靜態文件根本不被 nginx 處理?
因為
/fake/file.js
不再是“靜態文件”(它不存在),所以被傳遞到 Apache,在那裡它被內部重寫以獲得所需的響應。ExpiresByType text/javascript A31556952
text/javascript
可能不是您伺服器上 JavaScript 響應的“正確”mime 類型。您需要確認您的伺服器將這些響應發送回的 MIME 類型(即標頭),但這些天Content-Type
通常會改為。application/javascript
換句話說:ExpiresByType application/javascript A31556952
為了澄清,mod_expires
ExpiresByType
設置了Expires
和Cache-Control: max-age
HTTP 響應標頭。Cache-Control: max-age
優先考慮所有現代瀏覽器。Expires
實際上僅用於舊版支持。旗幟
$$ L $$在 RewriteRule 中必須停止 nginx 處理靜態文件
該
L
標誌只是停止 Apache 上重寫引擎的目前傳遞。這些指令本身不會影響 Nginx(它似乎充目前端代理)。