by Devin Yang

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

开始前先来抱怨一下,本来我的网站可以依使用者的浏览器自动显示不同的语系的。
这有何不可,但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

需要登入才可留言!

类似文章


dlaravel

[D-Laravel]关於chowner.

关於D-Laravel的Chowner 本文说明在D-Laravel中chowner的功能。 如果您是Linux的使用者,可能需进行这个动作。

docker,laravel,nfs

Docker在macOS上的NFS

D-laravel的nfs模式,在这篇文章您可以了解到,如何在macOS使用NFS+Docker。

dlaravel

如何在host直接运行容器内,不同Project的php artisan.

本篇为D-Laravel的运用教程,如何在主机端直接运行container内的php artisan. 自定义别名后,就能直接在host端的project数据夹内,直接运行contianer内的php artisan了。 alias a="../../artisan.sh"