Frontend- und Backend-Pfade in Yii2 mit .htaccess und Request Component ausblenden
Problemübersicht
Yii2-Anwendungen zeigen standardmäßig Frontend- und Backend-Pfade in URLs an. Dies kann für ein sauberes und benutzerfreundliches Erlebnis unerwünscht sein. Ziel ist es, die gesamte Site zugänglich zu machen, ohne diese Pfade preiszugeben.
Lösung
Um dies zu erreichen, wird eine Kombination aus .htaccess-Konfigurationen und einer benutzerdefinierten Request-Komponente verwendet .
Schritt 1: .htaccess-Konfiguration
Erstellen Sie eine .htaccess-Datei im Stammverzeichnis (d. h. advanced/.htaccess) mit dem folgenden Code:
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
Schritt 2: Benutzerdefinierte Anforderungskomponente
Erstellen Sie eine Datei „components/Request.php“ im gemeinsamen Verzeichnis und fügen Sie den folgenden Code hinzu:
<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>
Schritt 3: Komponentenkonfiguration
Fügen Sie in den Dateien frontend/config/main.php und backend/config/main.php Folgendes unter dem Komponentenarray hinzu:
<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>
Optionaler Schritt 4: .htaccess-Datei im Webverzeichnis
Wenn die URLs noch die Frontend-/Backend-Pfade enthalten, erstellen Sie eine .htaccess-Datei im Webverzeichnis mit den folgenden Zeilen :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/ [L]
Fazit
Mit diesen Änderungen funktioniert die Yii2-Anwendung nun ohne Anzeige der Frontend- und Backend-Pfade in den URLs, was eine benutzerfreundlichere Lösung bietet und sicheres Front-End-Erlebnis.
Das obige ist der detaillierte Inhalt vonWie verstecke ich Frontend- und Backend-Pfade in Yii2-Anwendungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!