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

需要登入才可留言!

類似的文章


laravel

@dump介紹,Laravel 5.6.8新功能

在Laravel 5.6的directive多了一個新功能叫@dump了 讓我們來看看他有多cool。

openapi,ai,laravel

在Laravel上寫OpenAI測試API

最近好像大家都在講OpenAI,如果您也想玩,可以在Laravel的API寫個簡易的API測試哦。因為可以用curl呼叫,所以透過guzzle就能呼叫了。如果您登入了openai的網站,可在此處看到官方的教學說明https://beta.openai.com/docs/quickstart/build-your-applicationAPI的KEY的申請,就在這頁的下方就有按鈕了+ Create new secret key

laravel

奔跑吧Laravel

如果您還沒聽過D-Laravel,容我介紹一下,D-Laravel為採用docker-compose所建立的Laravel與docker執行環境, 透過簡單的bash讓我們快速生成Laravel的專案。 本文教您如何使用D-Laravel的提供的docker image,來建立swoole的執行開發環境。 看完這篇,您應該能快速的透過D-Laravel建立出swoole的執行環境囉。