使用 .htaccess 在 Yii2 网站上隐藏前端/web 和后端/web 目录
问题:
在 Yii2 Advanced 模板中,前端和后端目录可以在网站的 URL 中看到。对于更专业或定制的外观来说,这可能是不受欢迎的。
解决方案:
要隐藏这些目录,请修改网站根目录中的 .htaccess 文件,如下所示:
Options +FollowSymlinks RewriteEngine On # Handle admin URL separately 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 assets 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] # Handle frontend 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
其他配置:
为了正确处理 URL,请在公共目录中创建一个 elements/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>
分别在 frontend/config/main.php 和 backend/config/main.php 中配置 Request 组件:
<code class="php">// frontend 'request' => [ 'class' => 'common\components\Request', 'web' => '/frontend/web' ], // backend 'request' => [ 'class' => 'common\components\Request', 'web' => '/backend/web', 'adminUrl' => '/admin' ],</code>
Web 目录的附加 .htaccess 配置:
如果上述步骤无法解决问题,请在 Web 目录(前端和后端)中创建或修改 .htaccess 文件,其中包含以下内容:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/ [L]
之后实施这些配置后,网站的 URL 将不再显示 frontend/web 或 backend/web 目录,从而提供更干净、更专业的外观。
以上是如何在 Yii2 网站的 URL 中隐藏前端和后端目录?的详细内容。更多信息请关注PHP中文网其他相关文章!