Home  >  Article  >  Backend Development  >  How to Completely Hide Frontend and Backend Paths in Yii2 Advanced Applications?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 17:15:03267browse

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:

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

<code class="php">'request' => [
    'class' => 'common\components\Request',
    'web' => '/frontend/web'
],
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false
]</code>

backend/config/main.php

<code class="php">'request' => [
    'class' => 'common\components\Request',
    'web' => '/backend/web',
    'adminUrl' => '/admin'
],
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false
]</code>

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?/ [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.

The above is the detailed content of How to Completely Hide Frontend and Backend Paths in Yii2 Advanced Applications?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn