sitemap.xml 應該算是 SEO 中相當重要的一個檔案,告訴搜尋引擎到底網站中有哪些資源是公開瀏覽的,可惜 Laravel framework 並沒有支援這項功能,必須透過其他工具達成。
以下介紹二個目前看到比較欣賞的解決方法。
軟體開發、伺服器和生活瑣事
sitemap.xml 應該算是 SEO 中相當重要的一個檔案,告訴搜尋引擎到底網站中有哪些資源是公開瀏覽的,可惜 Laravel framework 並沒有支援這項功能,必須透過其他工具達成。
以下介紹二個目前看到比較欣賞的解決方法。
Laravel 9 released,除了長期支援到 2024-02-08 以外,還有一些異動,像是 PHP 僅支援 8.x 或以上。
詳細內容請參考官方說明:https://laravel-news.com/laravel-9-released
從官方網站整理下來:
使用 Airlock 可以更輕鬆的支援 single page application (SPA)、token-based API 等等,同時也可以針對 token 設定可存取犯元 (scope)。 (感覺上類似 OAuth)
以往使用者從 Eloquent ORM 拉出資料以後,使用者可以自訂 cast type,也就是說可用者可以自動 cast attribute 成特定格式。範例可以參考 Laravel 的 Pull Request。
新增不少功能來 render HTML。詳細說明請參考 Larvel Docs。
為了史 API 更靈活,Laravel 使用 Guzzle HTTP client 來與其他 API 溝通。
透過新的方式來做 route 的 cache,即使大型網站 (800 routes) ,route matching 的速度也可以比以往快上 20 倍。
第一個要求 Laravel 要使用 HTTP or HTTPS (以下簡稱 protocol … 因為字太多了 .._Drz) 的方法,其實就是在「.env」做設定,例如:
APP_URL=http://zeroplex.tw
再來網路上應該會找到,要開發者在 AppServiceProvider 中加入設定:
URL::forceScheme('https');
這邊的 URL facade,可以從 config/app.php 中追蹤到,是 IlluminateRoutingUrlGenerator::class 的 alias,設定了 forceSheme() 以後,未來透過 UrlGenerator 建立的 link 都會是設定好的 protocol。
BUT …. 就是這個 BUT,若是遇到另一個其他的 method 來產生 URL (例如 IlluminateRoutingRedirector::route() …),這樣就可能吃到開發者設定的 protocol ,則由 Laravel 會自動抓進來的 request 來判斷該用什麼 protocol,若 application 剛好是靠 Nginx 在 handle HTTP SSL 的話,request 到 Laravel 這端時 HTTPS 就已經轉成 HTTP,導致 Laravel 以為 application 沒有上 HTTPS。
若要讓 reverse proxy 後面的 Laravel application 都固定用 HTTPS 的話,可以再到 app/Http/Middleware/TrustedProxy.php 去修改設定,讓 Laravel 識別 proxy 做出對應的動作 (給正確的 protocol)。
建立 table 時可能會同時建立 foreign key:
$table->foreign('good_id')
->references('id')
->on('goods')
->onDelete('cascade');
$table->index('value');
這個情況下要直接 dropIndex() 是會出現錯誤的,要先把 key constraint 解掉再來刪除 index。
而 constraint key name 用 show index from TABLE 是看不到的,但是可以使用下面的語法看到 create table 時做的事情:
show create table NAME
看到 contrain key name 以後先用 dropForeign() 刪除,再 dropIndex() 即可。
ps. 記得事情處理完以後,要把 constraint 加回去喔