by Devin Yang

建立於: 3年前 ( 更新: 3年前 )

開始前先來抱怨一下,本來我的網站可以依使用者的瀏覽器自動顯示不同的語系的。
這有何不可,但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

需要登入才可留言!

類似的文章


docker,laravel

用Docker建立Lravel開發環境超簡單

Laravel 5.5系統環境您準備好了嗎? laravel/framework 5.5.x-dev requires php &gt;=7.0 -&gt; your PHP version (5.6.30) does not satisfy that requirement. 這篇文章描述如何使用Docker創建Laravel的開發環境。 有了簡單到爆炸的D-Laravel簡易bash, 不要在說我無法建立Laravel的開發環境了。

laravel,laravel livewire

Laravel livewire檔案上傳展示

Livewire是一個給Laravel框架使用的全端框架。我第一次寫code,能寫到邊寫邊讚嘆神奇大概就是他了,我同事被我推坑後也是邊寫邊讚嘆。以前初學Vue時,也沒有他來的讓我如此驚奇。

dlaravel

使用D-Laravel build自己專用的php fpm image。

D-Laravel已提供了Build好的php image,如果需要自己調整及Build自己專用的Image相當簡單。 一、首先在D-Laravel的錄中,進入dockerfiles/fpm,選擇您要Build的PHP版本,例如7.2。 指令如下...