在config/app.php里面有這樣一個設置項:
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://localhost',
由上面的注釋可知,當我們以cli模式調用php時,就會使用這個url來生成正確的網址。
遇坑過程
當我嘗試使用redis作為mail發送隊列的時候,需要將發送的郵件放到redis里面后,然后執行php artisan queue:listen將郵件讀取出來并發送。
由于發送的郵件模板里面使用url()函數,因此理論上會讀取到config/app.php里面url的設定值。
提前說明一下,為了部署的靈活性,我預先在env文件里面設置了APP_URL,然后在app.php里面調用它。
好,重點的地方到了!
在本地開發時,無論我嘗試多少遍,郵件里面url('/')取到的值永遠都是localhost!!
但是!將代碼部署到遠程以后(當然env里面APP_URL設置值已更改為部署服務器的網址),居然郵件里面顯示是正常的!!!
經過多次測試,和使用php artisan tinker進行了反復確認,確實在本地無論配置怎么改,url('/')永遠都是localhost;而服務器永遠都是www.zshanjun.com。
問題是,為什么本地表現出這樣的行為?
填坑過程
問題出現在本地,那么我就從本地找原因。
通常我們在本地開發時,一般都習慣將網站的域名設置為例如zshanjun.dev
問題就出現在這個地方!
當我在本地開發時,會直接將APP_URL設置為zshanjun.dev,在線上的時候,會將APP_URL設置為http://www.zshanjun.com。
這時候,如果細心一點,應該就能發現它們兩者的區別了!
解決方案就是,給zshanjun.dev也加上http://!
到此問題解決!
參考網站: