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

需要登入才可留言!

類似的文章


nginx,dlaravel

如何設定nginx上的HTTPS,取得Qualys的SSL A+評分

本文介紹如何調整nginx的ssl設定,讓網站取得SSL報告,取得A+的評比。 這裡我使用的為 letsencrypt 免費憑證。 只要您使用D-Laravel預設的Docker官方nginx新版image,應該都可以達到跟我一樣的效果。 可透過下方檢測您的主機SSL設定。 https://www.ssllabs.com/ssltest/index.html

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範例,laravel教學,livewire範例,laravel

如何在Laravel Livewire元件設定中文化的錯誤訊息

本文透過簡易的Laravel livewire範例,看看livewire元件如何驗證使用者輸入錯誤,並顯示中文錯誤訊息。