目錄
材質準備
#將網域分割為參數
首頁 php框架 Laravel 詳解Laravel路由domain解決多域名問題

詳解Laravel路由domain解決多域名問題

Mar 30, 2021 pm 05:15 PM
laravel nginx php

以下由laravel教學專欄為大家介紹Laravel 路由研究之domain 解決多網域問題,希望對需要的朋友有幫助!

詳解Laravel路由domain解決多域名問題

Laravel 路由研究之domain 解決多域名問題

材質準備

  • 一份乾淨的laravel
  • 兩份Nginx設定文件,主要配置如下:

    server_name *.amor_laravel_test_1.amor;
    root /var/www/amor_laravel_test/public;
    index index.php index.html index.htm;
    登入後複製
    server_name *.amor_laravel_test.amor;
    root /var/www/amor_laravel_test/public;
    index index.php index.html index.htm;
    登入後複製

#將網域分割為參數

Route::domain('{account}.{webname}.{suffix}')->group(function () {

    Route::get('user/{id}', function ($account, $webname, $suffix, $id) {
        // 可以在请求中接收到被分割的参数,可能的使用场景:在单独路由中需要根据不同的域名处理不同的需求

        dd($account, $webname, $suffix, $id);

    });
});
登入後複製

##注意: 若account不固定,可以將Nginx Server Name 配置為泛型: *.example.com

關於多網域

設定兩個不同的網域如下:

  1. server_name *.amor_laravel_test.amor;
  2. server_name *.amor_laravel_test_1.amor;

##如何讓Laravel匹配不同的網域名稱?

方式1:直接在route/web.php中使用domain區分

Route::domain('{account}.amor_laravel_test.amor')->group(function () {

    Route::get('user/{id}', function ($account, $id) {
        //

        dd($account, $id);

    });
});

Route::domain('{account}.amor_laravel_test_1.amor')->group(function () {

    Route::get('user/{id}', function ($account, $id) {
        //

        dd(111, $account, $id);

    });
});
登入後複製

方式2:透過設定RouteServiceProvider 區分
  • #新增方法:
        protected function mapSelfRoutes()
        {
            Route::domain('{account}.amor_laravel_test_1.amor')
                ->middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/self.php'));
        }
    登入後複製
  • 註冊
          public function map()
          {
              $this->mapApiRoutes();
      
              $this->mapWebRoutes();
      
              $this->mapSelfRoutes();
      
              //
          }
      登入後複製
    • 新增路由檔案

      Route::get('/user', function ($account) {
          dd($account);
      });
      登入後複製
      注意: 必須全部設定domain,如果只設定了self 那麼在相同請求路徑下,未設定domain的將會先配對到。

      【推薦:最新的五個Laravel影片教學

      關於路由中的Action在多網域下的說明


      首先,我們需要知道Action決定了路由會綁定到哪個控制器,還有一點要注意,路由中的Action屬性,決定了輔助函數route() 產生的url。

      假如,我們的路由配置如下:
      • 第一個路由
      Route::get('/', function () {
          if(\Illuminate\Support\Facades\Auth::check()) {
              return redirect('index');
          } else {
              return redirect('login');
          }
      });
      登入後複製
      登入後複製
    • 第二個路由
    • Route::get('/', function () {
          if(\Illuminate\Support\Facades\Auth::check()) {
              return redirect('index');
          } else {
              return redirect('login');
          }
      });
      登入後複製
      登入後複製

      一模一樣,都是呼叫內建的login路由,控制器也一樣,我們再看模板中的form表單

      <form method="POST" class="form-horizontal" action="{{ route(&#39;login&#39;) }}">
      ---
      </form>
      登入後複製
      route() 輔助函數,會去讀取路由namelist 中載入的login,如果我們在RouteServiceProvider 中將這兩個路由檔案同時載入進來,

      public function map()
      {
          $this->mapApiRoutes();
      
          $this->mapWebRoutes();
      
          $this->mapSelfRoutes();
      
          //
      }
      登入後複製
      那麼:不區分namespace或不區分控制器都會導致route 輔助函數產生的絕對路徑是最後一個路由domain ,因此如果我們的邏輯一致,只是想透過簡單的修改,透過不同的網域區別不同的站點,我們需要做判斷,按需載入:

      public function map()
      {
          if(request()->getHost() == env('ONLINEDOWN_DOMAIN')) {
              $this->mapApiRoutes();
          }
      
          if(request()->getHost() == env('PCSOFT_DOMAIN')) {
              $this->mapPcsoftRoutes();
          }
      
          $this->mapWebRoutes();
          //
      }
      登入後複製

      總結:


      1.推薦第二種方式來區分域名,優點在於路由分離,結構清晰,
      2.domain不僅可以作為區分子域名來使用,也可以做參數分割,不同域名區分等
      3.注意Laravel的路由匹配順序,希望大家能認真的做一遍,體驗一下,做到心中有數
      4.既然已經區分開域名,那麼就可以綁定到不同的控制器,或者綁定不同的模型,大家靈活應用

      ####

      以上是詳解Laravel路由domain解決多域名問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

      本網站聲明
      本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

      熱AI工具

      Undresser.AI Undress

      Undresser.AI Undress

      人工智慧驅動的應用程序,用於創建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用於從照片中去除衣服的線上人工智慧工具。

      Undress AI Tool

      Undress AI Tool

      免費脫衣圖片

      Clothoff.io

      Clothoff.io

      AI脫衣器

      Video Face Swap

      Video Face Swap

      使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

      熱門文章

      <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
      3 週前 By 尊渡假赌尊渡假赌尊渡假赌
      北端:融合系統,解釋
      3 週前 By 尊渡假赌尊渡假赌尊渡假赌
      Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
      3 週前 By 尊渡假赌尊渡假赌尊渡假赌

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費的程式碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      強大的PHP整合開發環境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺化網頁開發工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級程式碼編輯軟體(SublimeText3)

      熱門話題

      Java教學
      1666
      14
      CakePHP 教程
      1425
      52
      Laravel 教程
      1327
      25
      PHP教程
      1273
      29
      C# 教程
      1253
      24
      nginx和apache:了解關鍵差異 nginx和apache:了解關鍵差異 Apr 26, 2025 am 12:01 AM

      NGINX和Apache各有優劣,選擇應基於具體需求。 1.NGINX適合高並發場景,因其異步非阻塞架構。 2.Apache適用於需要復雜配置的低並發場景,因其模塊化設計。

      哪些數據庫版本與最新的Laravel兼容? 哪些數據庫版本與最新的Laravel兼容? Apr 25, 2025 am 12:25 AM

      最新版本的Laravel10與MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。這些版本選擇是因為它們支持Laravel的ORM功能,如MySQL5.7的JSON數據類型,提升了查詢和存儲效率。

      作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

      AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

      php框架laravel和yii區別是什麼 php框架laravel和yii區別是什麼 Apr 30, 2025 pm 02:24 PM

      Laravel和Yii的主要區別在於設計理念、功能特性和使用場景。 1.Laravel注重開發的簡潔和愉悅,提供豐富的功能如EloquentORM和Artisan工具,適合快速開發和初學者。 2.Yii強調性能和效率,適用於高負載應用,提供高效的ActiveRecord和緩存系統,但學習曲線較陡。

      session_start()函數的意義是什麼? session_start()函數的意義是什麼? May 03, 2025 am 12:18 AM

      session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

      H5:HTML5的關鍵改進 H5:HTML5的關鍵改進 Apr 28, 2025 am 12:26 AM

      HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

      如何使用MySQL的函數進行數據處理和計算 如何使用MySQL的函數進行數據處理和計算 Apr 29, 2025 pm 04:21 PM

      MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

      Laravel 最佳擴展包推薦:2024 年必備工具 Laravel 最佳擴展包推薦:2024 年必備工具 Apr 30, 2025 pm 02:18 PM

      2024年必備的Laravel擴展包包括:1.LaravelDebugbar,用於監控和調試代碼;2.LaravelTelescope,提供詳細的應用監控;3.LaravelHorizon,管理Redis隊列任務。這些擴展包能提升開發效率和應用性能。

      See all articles