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, laravel, docker-compose

D-Laravel v1.0.0 release变更说明

为了让container可以被更灵活运用,D-Laravel释出v1.0.0版了,此版本为不向下相容变更。 https://github.com/DevinY/dlaravel/releases/tag/v1.0.0 如果您使用为 v1.0.0 之前,您需修改Laravel项目的.env档,DB_HOST=127.0.0.1变更为DB_HOST=db 如果您有自定义的docker-compose-custom.yml档....more

Laravel linux

我的移动电脑,安装Laravel 8在Sony xperia 5 II上

这是我的第一只Android手机,试装Laravel完全没问题耶,基本上我装了vim及mariadb。 运行sshd后,可以透过8022登录哦,完全是一台移动电脑了:p。 我使用的软体是Termux...

dlaravel

D-Laravel的sublime外挂以可由Package Control安装罗。

Mac或Linux的使用者,现在可由Sublime3的package control进行D-Laravel alias的包安装罗。 透过D-Laravel alias,我们可以使用更轻松的方式,运行容器内的artisan及composer命令。 docker的环境,要用composer安装包吗,不需再进入container内,或是设置composer的ce别名,即可在sublime中直接运行。