環境
php7.4
nginx1.17
mysql5.7
laravel8
windows10
路線
控制器返回檢視時這麼操作
public function test(Request $request) { $view = view('test'); Storage::disk('local')->put('views/' . $request->path(), $view->render()); return $view; }
nginx配置這麼寫
location / { root D:/wwwroot/demo/storage/app/views; index index.html; try_files $uri $uri.html @default; } location @default { root D:/wwwroot/demo/public; index index.php; try_files $uri $uri/ /index.php$is_args$query_string; }
這樣就能在第一次訪問時生成相應的靜態網頁,之後再訪問時就會直接返回靜態網頁。
- 進一步
實現過期刪除、自動更新功能,大概就是獲取views資料夾下的所有檔名,記錄在案,然後定期清除,還可以主動發出請求觸發更新。另一個就是無損實現全站靜態化,這需要覆蓋 Foundations/helpers.php
中的 view()
方法,然而這個檔案已經被建立自動載入對映了,正常情況下無法覆蓋,你可以安裝 funkjedi/composer-include-files
,它可以優先自動載入你自定義的php檔案,這樣就ok了。
- 認證狀態
通常需要顯示當前登入使用者的頭像,靜態化後就不能顯示了?當然可以。
比如,認證後儲存使用者資料到瀏覽器,透過js把當前狀態更新到靜態的html上。
本作品採用《CC 協議》,轉載必須註明作者和本文連結