by Devin Yang

建立于: 2年前 ( 更新: 2年前 )

开始前先来抱怨一下,本来我的网站可以依使用者的浏览器自动显示不同的语系的。
这有何不可,但Google的SEO似乎不喜欢这么搞,他建议每种语言使用不同的网址,
不要用cookie或浏览器设置来调整网页内容,好吧那我只能乖乖就范了。
他的建议作法,
第一种方案:
依国家区分,像是example.tw或example.de
这真的天方夜谭怎么可能,要嘛收购被注册的域名,要不然取个全球没人会取的怪域名还比较有机会。
第二种方案:
用子域名区分,这正式我准备要做的,等等来说明在Laravel中怎么弄。
第三种方案:
example.com/tw/ 之类的,Apple好像就这么弄的。
第四种方案:
site.com?loc=tw之类,不建议使用,确实我也觉的这个不是一个好主意。

我当然是想,code改一支就好,别不同的网站还要改不同的code,
Laravel双生武魂、先天满魂力您说是不是,听不懂哦,我卡通看太多,
我指Laravel内建多语环境了,连.env也可以有多个 呀 ,
当然是一个主机环境跑我所有想支持的语系比较方便,是吧?

经过了一堆抱怨跟废话后,问题来了,我怎么弄。
开启bootstrap/app.php,粘贴进程码在$app初始化的下方罗:
透过$app->loadEnvironmentFrom,我们就能自动依子域名加载不同的.env档了,即.env.[子域名]。

原则上要我们的proxy有定义的子域名才能吃到相对的.env.[子域名]文件,乱打是不通的,
我认为理论上并不会有什么安全顾虑,我的理解是这样。

<?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

//依子域名加载env
if(!empty($_SERVER['HTTP_HOST'])){
    $subdomain_envfile = sprintf(".env.%s",explode(".",$_SERVER['HTTP_HOST'])[0]);
    $app->loadEnvironmentFrom($subdomain_envfile);
}

上面的进程中,容我说明一下,这个empty($_SERVER['HTTP_HOST'])的检测很重要。
因为artisan可没有$_SERVER['HTTP_HOST']这种东西,这会造成加载.env失败。
所以需判断$_SEVER['HTTP_HOST']存在时,才去载有子域名的.env.[子域名」文件。

假设,我有两个域名:
www.ccc.tc及en.ccc.tc(计划上线中),别试现在还没有,
我的自动化wildcard子域名的证书申请进程每个礼拜都用光所有额度,要再等一天我才能 再申请新的@@。
那么,开启en.ccc.tc,就能自动加载.env.en的环境罗。
如果我们的设置都没问题,那么加上--env的参数tinker也是能正常开启的。

偷偷透漏,我已经实做多翻译API的调用了,有几个真的佛心来著,是计次不是计字,
这个网站只是个人学习日志跟分享用的,搞到买翻译API付费调用这我辨不到,只能跟那些厂商说抱歉啦。
架构已完成了,有机会再多扩展一些不同的API,翻译质量我就顾不上了,最多再人工调整一下😝
被我用爆了好几个0元的订阅方案,初步想法让这个网站支持中英日语系😎。


如果您喜欢本文章,救救我的SEO,帮我压个赞感谢您。
 

Tags: laravel dotenv seo

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


d-laravel, docker, docker-compose, laravel

D-Laravel释出v0.9.1版了

为了让D-Laravel保持在一个可运作的版本及稳定的本。 开始使用Tag标注该版本通过测试那些测试.. 这个版本已通过ubuntu实及macos实机测试,可顺利创建Container及运行哦..

laravel

我如何升级后台到Lravel 5.5

我的后台一开始是自己打造的框架,一样采用MVC架构,自己做的数据库连线及环境设置档等,包含自己的样版语法,直到我想要去支持Restful时, 有个想法,别人都写好了我何必自己去重写同样的功能,写出来会比较好吗? 所以开始改用框架, 一开始采用Slim,主要因为他对於php的支持版本较低,但由於的Slim的twig templates没有Laravel的blade template好用...

laravel,laravel livewire

Laravel livewire文件上传展示

Livewire是一个给Laravel框架使用的全端框架。我第一次写code,能写到边写边赞叹神奇大概就是他了,我同事被我推坑后也是边写边赞叹。以前初学Vue时,也没有他来的让我如此惊奇。