问题:
访问前端或后端时Yii2 应用程序中,路径“frontend/web”和“backend/web”在 URL 中可见,这可能是不受欢迎的。本文提供了完全隐藏这些路径的解决方案。
解决方案:
第 1 步:根文件夹中的 .htaccess
在根文件夹(advanced/)中创建一个 .htaccess 文件,内容如下:
Options +FollowSymlinks RewriteEngine On # Admin 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] # Frontend 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
第 2 步:components/Request.php
创建组件/Request.php 在 common 目录中添加以下代码:
<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 和 backend/config/main.php 的组件数组下添加以下内容:
<code class="php">'request' => [ 'class' => 'common\components\Request', 'web' => '/frontend/web' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ],</code>
在 backend/config/main.php 中,另外设置 adminUrl:
<code class="php">'request' => [ 'class' => 'common\components\Request', 'web' => '/backend/web', 'adminUrl' => '/admin' ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ],</code>
第 4 步(可选):Web 目录中的 .htaccess
使用以下内容在 frontend/web 和 backend/web 目录中创建 .htaccess 文件:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/ [L]
结果:
进行这些更改后,您应该能够访问 http://localhost/yii2app/ 的前端和 http://localhost/yii2app/admin 的后端/ 看不到 URL 中的前端或后端路径。
以上是如何使用 .htaccess 隐藏 Yii2 中的前端和后端路径?的详细内容。更多信息请关注PHP中文网其他相关文章!