爲什麼沒有安全的混合功能選項,比如資產功能?現在我只是複製了幫手,並寫了我自己的mix_secure函數,但我很驚訝沒有人偶然發現了那個呢?可悲的是資產功能沒有緩存破壞...何處使用Laravel Mix啓用Https
任何想法/想法?
乾杯,
羅賓
爲什麼沒有安全的混合功能選項,比如資產功能?現在我只是複製了幫手,並寫了我自己的mix_secure函數,但我很驚訝沒有人偶然發現了那個呢?可悲的是資產功能沒有緩存破壞...何處使用Laravel Mix啓用Https
任何想法/想法?
乾杯,
羅賓
爲什麼會出現在混合功能沒有安全的選項像有對資產的功能?
因爲mix()
只返回如果您的刀片模板
<script src="{{ mix('js/app.js') }}"></script>
使用只是由本身,它將使作爲
<script src="/js/app.js?id=c5ac0d032c3d7fe2f10e"></script>
和相對於URL
因此URI瀏覽器會選擇任何方案(HTTP或HTTPS)和e域名是由它提供的。當你想用不同的方案提供資產時,我無法想到這種情況。現在你更希望通過HTTPS提供一切服務。
現在,如果你想建立一個完整的URL,以資產有兩個內置函數asset()
和secure_asset()
這也正是他們的名字所暗示的:
>>> asset(mix('js/app.js')) => "http://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e" >>> secure_asset(mix('js/app.js')) => "https://domain.dev/js/app.js?id=c5ac0d032c3d7fe2f10e"
可悲的是資產函數沒有緩存破壞...
你再次看到這個錯誤。 mix()
負責URI而不是asset()
,它將使用在編譯資產時生成的資產清單public/mix-manifest.json
來生成正確的路徑。爲了充分利用自動緩存無效,你需要版本的編譯時資產laravel混合
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.version(); // You need to version assets if you want automatic cache busting
然後混合V1.0.0資產的文件名會包含哈希之前
/js/app-c5ac0d032c3d7fe2f10e.js
與混合V1.0.0及以上的散正處於查詢參數
/js/app.js?id=c5ac0d032c3d7fe2f10e
感謝您的回覆。有趣的是,mix確實會爲我返回一個完整的URL,而不僅僅是URI(這確實可以解決問題)。如果我查看混合函數的Laravel源代碼,最後一行實際上會調用資產函數'return new HtmlString(asset($ manifestDirectory。$ manifest [$ path]));'。這就是爲什麼我構建了'mix_secure',它是mix函數的副本,但最後一行的資產函數爲'return new HtmlString(asset($ manifestDirectory。$ manifest [$ path],true)); '。這個解決方案適用於我,但我很驚訝它不是內置的!? – bobinrinder
爲什麼不使用版本緩存清除? – tompec