"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Completely Hide Frontend and Backend Paths in Yii2 Advanced Applications?

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

Published on 2024-11-18
Browse:370

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

Completely Hiding Yii2 Frontend and Backend Paths

Understanding the Problem

Yii2's Advanced Application Template creates frontend and backend sections in separate directories. By default, these directories appear in URLs, which can be undesirable for a clean and professional-looking presentation. This article aims to guide you in hiding these directories completely.

Step-by-Step Guide

1. Root .htaccess Configuration

In the project's root directory (e.g., advanced/), create a .htaccess file and paste the following code:

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. Request Component

Create a components/Request.php file in the common directory and add the following code:

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. Configuring Frontend and Backend Applications

In frontend/config/main.php and backend/config/main.php, modify the request and urlManager components as follows:

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
]

Optional Step 4 (if Previous Steps Fail)

Create a .htaccess file in the web directory and add the following code:

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

Result

After applying these changes, you can access your website at http://localhost/yii2app and http://localhost/yii2app/admin without any frontend or backend paths appearing in the URLs.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3