在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://!
到此问题解决!
参考网站: