本地端使用 ngrok 測試 Laravel 時發現 URL routes 產生錯誤

使用 Laravel 在本地端測試串接第三方服務時我們會用到 ngrok 這個 proxy 服務,但你可能會發現既使修改了 .env 裡的 APP_URL 後,內建的 url generator 並沒有產生符合預期的 URL 網址。

使用 url 或是 route 時產生 localhost:8000 的情形

如果你遭遇到這個問題,你可以在 app\Providers\AppServiceProvider.php 這個檔案的 boot() 方法中加入以下呼叫:

URL::forceRootUrl(Config::get('app.url'));

這個方法讓你可以強迫 Laravel URL Generator 使用你指定的網址前綴。

產生的 assets URL 為 http,造成 mixed content 問題

由於 ngrok 預設是產生 https 網址,而現在的服務對於安全性要求也相當高,因此可能會要求你一定得使用 https 做為通訊協定 (例如:Facebook 登入的 Callback URL)。

如果你想要強制所有產生的網址都是 https 通訊協定,你會需要在 app\Providers\AppServiceProvider.php 這個檔案的 boot() 方法中加入以下呼叫:

URL::forceScheme('https');