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

需要登入才可留言!

類似的文章


laravel

如何使用Laravel的Validator自訂錯誤訊息

我們通常開發Laravel時,有時會進行欄位驗證,但使用Validator預設的訊息是英文的。 但當然想要有更精確顯示中文訊息顯示, 本文介紹,我如何使用Laravel的Validator自訂中文的訊息。

dlaravel

D-Laravel 釋出 v1.1.5

因應Laravel 5.5推出了,剛好php也出了php 7.0.23及php 7.1.9版了。 D-Laravel使用的fpm版本也進行更新囉...只要調整您的docker-compose所定義的版本 即可使用最新的php囉...

wordpress, d-laravel, docker, docker-compose

如何用D-Laravel安裝Wordpress

約8分鐘的教學影片,介紹在D-Laravel上安裝Wordpress. D-Laravel是一個docker-compose的Laravel框架開發環境,但不代表他不能拿來裝別的東西。 這個影片,介紹使用D-Laravel安裝非Laravel的PHP專案, 您可以學到D-Laravel上的相關指令用法: ./create --host用法, docker-compose up -d及 ./console mysql用法, D-Laravel v1.0.0版後的資料庫連線設定方式。