Apache-2.2
Apache HTTP 2.2:當查詢字元串版本存在時設置記憶體頭
我在網上找到瞭如何做到這一點的例子,但我無法讓它發揮作用。
想要為具有類似 ?v=123 的查詢字元串的請求設置較長的未來記憶體時間。我在下麵包含了我的配置。但它只是行不通。我究竟做錯了什麼?
RewriteEngine on RewriteCond %{QUERY_STRING} ^v RewriteRule ^.*$ - [ENV=LONGCACHE:1] Header set Cache-Control "max-age=31536000, public" env=LONGCACHE
我在測試查詢字元串的正則表達式上嘗試了一堆不同的組合,似乎沒有任何效果。
原來這個配置需要在裡面
<VirtualHost>
,這很痛苦,因為我試圖從conf.d
不必要。
(知道這些指令位於現有 vHost 之外的主伺服器配置中,這是您的問題中缺少的重要一點。)
“問題”是伺服器配置中的 mod_rewrite 指令
<VirtualHost>
預設情況下不被容器繼承。處理伺服器配置中的Header
指令(mod_headers 的一部分),但由於 mod_rewrite 指令尚未執行且未設置環境變數,因此未設置標頭。LONGCACHE
如果您使用的是 Apache 2.4,那麼您可以使用
SetEnvIfExpr
(mod_setenvif) 根據查詢字元串的存在來設置環境變數,並避免使用 mod_rewrite。在 Apache 2.2 上,您需要在
<VirtualHost>
容器中啟用 mod_rewrite 繼承:RewriteEngine On RewriteOptions Inherit
但是請注意,來自伺服器配置的指令是在虛擬主機上下文中的指令**之後繼承的(注意:容器中的指令不適用,因為它們稍後執行 - 在目錄上下文中)。這意味著 vHost 中的指令可能會阻止伺服器指令被執行。(在 Apache 2.4+ 上,您可以更好地控制指令的繼承方式。)
<Directory>
或者,根據需要將這些“共享”指令包含在單獨的配置文件和
include
每個虛擬主機中的配置文件中。