使用.htaccess 和請求組件隱藏Yii2 中的前端和後端路徑
問題概述
Yii2 應用程式預設在URL 中顯示前端和後端路徑。對於乾淨且用戶友好的體驗來說,這可能是不可取的。目標是在不洩露這些路徑的情況下使整個網站可存取。
解決方案
為了實現此目的,使用.htaccess 配置和自訂請求組件的組合.
第1步: .htaccess配置
在根目錄(即advanced/.htaccess)中建立一個.htaccess文件,程式碼如下:
Options +FollowSymlinks RewriteEngine On # Handle admin URL first RewriteCond %{REQUEST_URI} ^/(admin) RewriteRule ^admin/assets/(.*)$ backend/web/assets/ [L] RewriteRule ^admin/css/(.*)$ backend/web/css/ [L] RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/ RewriteCond %{REQUEST_URI} ^/(admin) RewriteRule ^.*$ backend/web/index.php [L] # Handle frontend URL RewriteCond %{REQUEST_URI} ^/(assets|css) RewriteRule ^assets/(.*)$ frontend/web/assets/ [L] RewriteRule ^css/(.*)$ frontend/web/css/ [L] RewriteRule ^js/(.*)$ frontend/web/js/ [L] RewriteRule ^images/(.*)$ frontend/web/images/ [L] 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
第二步:自訂請求元件
在common目錄下建立一個components/Request.php文件,加入以下程式碼:
<code class="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(); } } }</code>
第3步:元件配置
在frontend/config/main.php和backend/config/main.php檔案中的components陣列下加入以下內容:
<code class="php">// frontend 'request' => [ 'class' => 'common\components\Request', 'web' => '/frontend/web' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], // backend 'request' => [ 'class' => 'common\components\Request', 'web' => '/backend/web', 'adminUrl' => '/admin' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ],</code>
可選步驟4:Web 目錄中的.htaccess 檔案
如果URL 仍包含前端/後端路徑,請使用以下行在Web 目錄中建立.htaccess 檔案:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/ [L]
結論
透過這些修改,Yii2 應用程式現在將在URL 中不顯示前端和後端路徑的情況下運行,從而提供更用戶友好的介面和安全的前端體驗。
以上是如何在 Yii2 應用程式中隱藏前端和後端路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!