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