Saltar al contenido

Yii2 htaccess – Cómo ocultar frontend / web y backend / web COMPLETAMENTE

Nuestro team de trabajo ha pasado mucho tiempo buscando para dar solución a tus búsquedas, te regalamos la soluciones por esto nuestro objetivo es que resulte de gran ayuda.

Solución:

Intente esto con el método .htaccess-

Paso 1

Cree el archivo .htaccess en la carpeta raíz, es decir advanced/.htaccess y escriba el código a continuación.

Options +FollowSymlinks
RewriteEngine On

# deal with admin first
RewriteCond %REQUEST_URI ^/(admin) <------
RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

RewriteCond %REQUEST_URI !^/backend/web/(assets|css)/  <------
RewriteCond %REQUEST_URI ^/(admin)  <------
RewriteRule ^.*$ backend/web/index.php [L]


RewriteCond %REQUEST_URI ^/(assets|css)  <------
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L] 
RewriteRule ^images/(.*)$ frontend/web/images/$1 [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

Nota : si está intentando en el servidor local, reemplace ^/ con ^/project_name/ donde ves el signo de la flecha. Quita esos letreros de flecha <------ una vez finalizada la configuración.

Paso 2

Ahora crea un components/Request.php archivo en el directorio común y escriba el código a continuación en este archivo.

namespace commoncomponents;


class Request extends yiiwebRequest 
    public $web;
    public $adminUrl;

    public function getBaseUrl()
        return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;
    


    /*
        If you don't have this function, the admin site will 404 if you leave off 
        the trailing slash.

        E.g.:

        Wouldn't work:
        site.com/admin

        Would work:
        site.com/admin/

        Using this function, both will work.
    */
    public function resolvePathInfo()
        if($this->getUrl() === $this->adminUrl)
            return "";
        else
            return parent::resolvePathInfo();
        
    

Paso 3

Instalando componente. Escriba el código a continuación en frontend/config/main.php y backend/config/main.php archivos respectivamente.

//frontend, under components array
'request'=>[
    'class' => 'commoncomponentsRequest',
    'web'=> '/frontend/web'
],
'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
],

// backend, under components array
'request'=>[
    'class' => 'commoncomponentsRequest',
    'web'=> '/backend/web',
    'adminUrl' => '/admin'
],
'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
],

Paso 4 (opcional, si no funciona hasta el paso tres)

crear archivo .htaccess en el directorio web

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

Nota: asegúrese de haber habilitado la reescritura de su mod en apache

¡Eso es todo! Puedes probar tu proyecto con
www.project.com/admin, www.project.com

en el servidor local
localhost/project_name/admin, localhost/project_name

Si tu único objetivo es lograr no ver nunca /frontend/web o /backend/web, incluso sin usar las reglas .htaccess, puede optar por lo siguiente:

¿Por qué no simplemente extraer el contenido del web carpetas y colocarlas en la raíz? Simplemente ajuste la ruta refiriéndose al marco y los archivos de configuración en los scripts de entrada index.php.

Su estructura de directorio se vería así:

- yii2app/
    - frontend/
    - backend/
    - common/
    - .. other folders..
    - admin/
        - assets/
        - css/
        - index.php
    - assets/
    - css/
    - index.php

Tu yii2app/index.php entonces se vería así:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/frontend/config/bootstrap.php');

$config = yiihelpersArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/frontend/config/main.php'),
    require(__DIR__ . '/frontend/config/main-local.php')
);

$application = new yiiwebApplication($config);
$application->run();

y tu yii2app/admin/index.php se vería así:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../common/config/bootstrap.php');
require(__DIR__ . '/../backend/config/bootstrap.php');

$config = yiihelpersArrayHelper::merge(
    require(__DIR__ . '/../common/config/main.php'),
    require(__DIR__ . '/../common/config/main-local.php'),
    require(__DIR__ . '/../backend/config/main.php'),
    require(__DIR__ . '/../backend/config/main-local.php')
);

$application = new yiiwebApplication($config);
$application->run();

EDITAR: sus scripts de entrada podrían verse diferentes a los míos, pero debería tener la idea de cambiar las rutas para encontrar los archivos del marco con estos ejemplos.

Como dijo @deacs, simplemente mueva los archivos de frontend / web a yii2app (carpeta raíz) y cree una carpeta en yii2app "admin" y mueva archivos desde backend / web a yii2app / admin y luego cree archivos .htaccess tanto en admin como en yii2app con siguiente código:

Options +FollowSymLinks
IndexIgnore */*

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

# otherwise forward it to index.php
RewriteRule . index.php

Luego agregue / modifique el componente urlManager en el archivo de configuración main.php tanto en frontend / config / main.php como en backend / config / main.php con el siguiente código:

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'enableStrictParsing' => false,
        'rules' => [
        ],
    ],

Luego cambie el index.php en yii2app con el siguiente código:

run();

También cambie el index.php en yii2app / admin con el siguiente código:

run();

Eso es todo lo que necesita para completar las URL amigables con SEO en yii2. Yo mismo estaba luchando y luego obtuve ayuda de la respuesta de @deacs y pensé que tal vez esto ayude a alguien.

Agradecemos que desees añadir valor a nuestra información añadiendo tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *