2017-10-13 68 views
2

我一直在開發一個網站結構如下如何處理http2-push和子目錄?

  • 主站點+ htaccess的
    • 神父子目錄(法國)
    • 恩子目錄(英文)
    • 資產子目錄中的圖像, js和css

htaccess的包含http2服務器推送如下:

<IfModule http2_module> 
SetEnvIf Cookie "cssloaded=1" cssloaded 
<filesMatch "\.([hH][tT][mM][lL]?)"> 
Header add Link "<assets/base/css/style.css>;rel=preload;as=style" env=!cssloaded 
Header add Set-Cookie "cssloaded=1; Path=/; Secure; HttpOnly" env=!cssloaded 
</filesMatch> 

的問題是,服務器也推壓從而產生404(法語和英語子目錄的style.css然後前進到加載沒有服務器推送的正確的,是../assets/base/css/style.css)。

如何避免這種OR(最好是)推動所有目錄中的文件,但指向正確的文件?

回答

0

你推一個相對路徑樣式表:

Header add Link "<assets/base/css/style.css>;rel=preload;as=style" env=!cssloaded 

爲什麼不推絕對的?:

,或者,使用位置或locationMatch代替fileMatch:

<locationMatch "^/$"> 
Header add Link "<assets/base/css/style.css>;rel=preload;as=style" env=!cssloaded 
Header add Set-Cookie "cssloaded=1; Path=/; Secure; HttpOnly" env=!cssloaded 
</locationMatch> 
<locationMatch "^/en/$"> 
Header add Link "<../assets/base/css/style.css>;rel=preload;as=style" env=!cssloaded 
Header add Set-Cookie "cssloaded=1; Path=/; Secure; HttpOnly" env=!cssloaded 
</locationMatch> 
<locationMatch "^/fr/$"> 
Header add Link "<../assets/base/css/style.css>;rel=preload;as=style" env=!cssloaded 
Header add Set-Cookie "cssloaded=1; Path=/; Secure; HttpOnly" env=!cssloaded 
</locationMatch> 
+0

不幸的是,它在htaccess中,所以locationmatch將無法正常工作...我沒有想到的絕對路徑,但擔心它需要額外的查找(否定服務器推送的速度優勢),但這是個好主意。我會測試它,謝謝! – Cerby

+0

爲什麼需要額外的查找? –

+0

你是對的,它不。絕對路徑建議順利運行。謝謝! – Cerby

相關問題