」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Yii2 高階應用中完全隱藏前後端路徑?

如何在 Yii2 高階應用中完全隱藏前後端路徑?

發佈於2024-11-18
瀏覽:644

How to Completely Hide Frontend and Backend Paths in Yii2 Advanced Applications?

完全隱藏Yii2 前端和後端路徑

理解問題

Yii2 的高級應用程式範本在單獨的目錄中建立前端和後端部分。預設情況下,這些目錄出現在 URL 中,這對於乾淨且專業的簡報來說可能是不可取的。本文旨在引導您完全隱藏這些目錄。

逐步指南

1.根.htaccess配置

在專案的根目錄(例如advanced/)中,建立一個.htaccess檔案並貼上以下程式碼:

Options  FollowSymlinks
RewriteEngine On

# Redirect admin requests to backend/web
RewriteCond %{REQUEST_URI} ^/(admin)
RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
RewriteRule ^.*$ backend/web/index.php [L]

# Redirect all other requests to frontend/web
RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php

2.請求元件

在common目錄下建立一個components/Request.php檔案,加入以下程式碼:

namespace common\components;

class Request extends \yii\web\Request {
    public $web;
    public $adminUrl;

    public function getBaseUrl(){
        return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;
    }

    public function resolvePathInfo(){
        if($this->getUrl() === $this->adminUrl){
            return "";
        }else{
            return parent::resolvePathInfo();
        }
    }
}

3.設定前端和後端應用程式

在frontend/config/main.php和backend/config/main.php中,修改request和urlManager組件如下:

frontend /config/main.php

'request' => [
    'class' => 'common\components\Request',
    'web' => '/frontend/web'
],
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false
]

backend/config/main.php

'request' => [
    'class' => 'common\components\Request',
    'web' => '/backend/web',
    'adminUrl' => '/admin'
],
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false
]

可選步驟4(如果前面的步驟失敗)

在Web目錄中建立一個.htaccess文件,並加入以下程式碼:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Result

應用這些變更後,您可以透過http:// 存取您的網站/localhost/yii2app 和http://localhost/yii2app/admin 沒有任何前端或後端路徑出現在URL 中。

最新教學 更多>
  • 如何在 Chrome DevTools 中存取 chrome.storage.sync 資料?
    如何在 Chrome DevTools 中存取 chrome.storage.sync 資料?
    在Chrome DevTools 中訪問chrome.storage.sync儘管Chrome DevTools 中提供了本地儲存和會話儲存檢查器,但使用者經常遇到chrome.storage.sync 缺少類似功能的情況。這可以透過替代方法解決。 使用擴充功能進行Chrome 儲存檢查儲存區域檢視...
    程式設計 發佈於2024-11-18
  • Scala Actor 可以取代 Go 的 Goroutine 進行函式庫移植嗎?
    Scala Actor 可以取代 Go 的 Goroutine 進行函式庫移植嗎?
    協程與Actor:Go 和Scala 的比較分析Actor 模型和Goroutines 之間的相似之處讓一些人質疑Scala是否可能是適合移植利用Goroutines 的Go 函式庫的語言。然而,仔細檢查就會發現這兩個概念之間有顯著差異。 協程:通訊順序流程 (CSP) 的基礎Go 中實現的 Gor...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-18
  • Python 的字串連接優化適用於大字串嗎?
    Python 的字串連接優化適用於大字串嗎?
    如何在Python 中高效地將一個字串附加到另一個字串在Python 中,使用' ' 運算子連接字串是一項常見任務。雖然下面的程式碼很簡單:var1 = "foo" var2 = "bar" var3 = var1 var2它提出了關於效率...
    程式設計 發佈於2024-11-18
  • 如何使用 PHP 的 `strtotime()` 和替代方案處理 1970 年之前的日期?
    如何使用 PHP 的 `strtotime()` 和替代方案處理 1970 年之前的日期?
    strtotime() 和1970 年之前的日期由於範圍有限,使用strtotime() 處理1970 年之前的日期可能會帶來挑戰。要解決此問題,請檢查您的 PHP 版本和平台。如有必要,請考慮升級。 或者,為了更靈活地處理更廣泛的日期範圍,請考慮使用 PHP 的 DateTime 物件。它們允許日...
    程式設計 發佈於2024-11-18
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-18
  • 超越分析器:我們如何實現準確的效能優化?
    超越分析器:我們如何實現準確的效能優化?
    超越分析器:探索替代性能優化技術在他的演講“性能焦慮”中,Joshua Bloch 強調了分析器的限制及其潛在的不準確性。然而,這提出了一個問題:我們還有哪些其他選項來優化效能?我們應該回歸我們的直覺和猜測嗎? Bloch 引用的論文「評估 Java 分析器的準確性」中得出的結論是,分析器可能由於不...
    程式設計 發佈於2024-11-18
  • Pandas 中的 inplace=True 真的值得冒險嗎?
    Pandas 中的 inplace=True 真的值得冒險嗎?
    在 Pandas 中,Inplace = True 被認為是有害的嗎? 簡介:概念Pandas 中的「就地修改」長期以來一直是爭論的話題。在本文中,我們將探討為什麼 inplace = False 是 Pandas 中的預設行為、何時考慮切換到 inplace = True 以及與其使用相關的潛在風...
    程式設計 發佈於2024-11-18
  • 如何避免 Lambda 函數中的參數修改導致意外結果
    如何避免 Lambda 函數中的參數修改導致意外結果
    Lambda 函數及其參數的範圍Lambda 函數是匿名函數,可以捕捉其封閉函數的範圍。這允許他們從父作用域存取變數和參數。但是,當 lambda 函數使用在封閉函數內修改的參數時,此行為有時會導致意外結果。 若要說明此問題,請考慮以下程式碼:def callback(msg): print...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中從變數實例化類別?
    如何在 PHP 中從變數實例化類別?
    在 PHP 中從變數實作類別實例化在 PHP 中,您可能會遇到需要從變數的值實例化類別的場景。讓我們用一個例子來說明這一點:$var = 'bar'; $bar = new {$var}Class('var for __construct()'); //$bar = new barClass('va...
    程式設計 發佈於2024-11-18
  • 為什麼我的 Chrome 輸入邊框在縮放時消失?
    為什麼我的 Chrome 輸入邊框在縮放時消失?
    Chrome 邊框在縮放時消失問題排查此論壇帖子中提出的問題涉及當用戶放大或縮小時Chrome 中的輸入邊框消失出去。雖然該問題可能並非對所有使用者都普遍存在,但它會影響特定的表單(可在 http://jsfiddle.net/TKb6M/91/ 上找到)。 例如,當縮放到 90% 時,原始表單邊框...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 我需要有準備好的語句的「mysql_real_escape_string()」嗎?
    我需要有準備好的語句的「mysql_real_escape_string()」嗎?
    準備好的語句是否需要 mysql_real_escape_string() 函式? 當使用給定查詢中的準備好的語句時:$sql = $db->prepare('select location from location_job where location like ?'); $sql->...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3