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

需要登入才可留言!

类似文章


d-laravel,docker

D-Laravel v1.2.1版变更说明(建议更新,必免踩雷)

D-Laravel v1.2.1版修正说明 use GuzzleHttp\Client; 进行post时.出现访问被拒的问题。 如果您是由旧版升级,您可能需调整etc/default-ssl.conf的设置档 (如果有该档) 请调整php:9000变更为web:9000,你可以透过运行一次./console secure调整。 docker-compose设置档部份,PHP-FPM container变更为network_mode: "service:web"...

laravel

Laravel 5.6有那些新变更

Laravel 5.6计划於2018年2月释出,有那些变更呢?我们来看看吧。(Argon2i Password Hashing Algorithm) Argon2 提供以下三种版本: 1. 在Laravel 5.6将支持 Argon2i密码哈希算法。 (Argon2i Password Hashing Algorithm) 2. Argon2d最大限度地抵抗GPU的破解攻击。 3. Argon2i经过优化,可以抵抗旁路攻击(side-channel attack)。 三、Argon2id是一个混合版本。 它遵循Argon2i方法进行第一遍遍历,然后使用Argon2d方法进行后续遍历。 看不懂没关系,反正我也看不懂,重点是,反正比较安全是可以确定的。这是开放密码杂^竞赛(PHC)在2015年7月20日