Mod-Rewrite

使用 Apache mod_rewrite 為不同的重定向設置不同的記憶體頭

  • September 19, 2018

我有一個 Apache vhost,它對請求的 URL 執行許多重寫操作(使用 mod_rewrite)。其中一些 RewriteRule 呼叫將瀏覽器重定向到其他主機(使用 301 和 302 重定向)。

我在該 vhost 文件中設置了 1 秒的預設到期時間:

ExpiresActive On
ExpiresDefault "access plus 1 second"

因此,所有重定向都包含此標頭:

Cache-Control: max-age=1

現在我要做的是在一個特定重定向的情況下輸出一個不同的記憶體頭。我希望大多數重定向(302s)繼續有 1 秒的有效期,但對於其中一個(301),我想使用 1 天的有效期。

這是可行的嗎?

有一種方法可以做到這一點,但不是 mod_expires。相反,您必須使用 mod_rewrite 設置環境變數,然後使用 mod_headers 有條件地添加正確的記憶體標頭,如Mark S. Kolich: Set the Cache-Control and Expires Headers on a Redirect with mod_rewrite中所述。

所以我的最終解決方案如下所示:

RewriteRule ... [last,redirect=301,env=longexpiry:1]
RewriteRule ... [last,redirect=302,env=nocache:1]

Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
Header always set Cache-Control "max-age=86400" env=longexpiry

確保您沒有設置 mod_expires 的預設到期時間,否則您最終會得到重複的標頭。

引用自:https://serverfault.com/questions/308191