route pretty htaccess framework example yii2 clean-urls yii-url-manager

pretty - yii2 htaccess



Habilite la URL limpia en Yii2 (11)

¿Cómo puedo habilitar las URL limpias en Yii2? Quiero eliminar index.php y ''?'' desde los parámetros de url. ¿Qué sección necesita ser editada en Yii2 para eso?


El primer punto importante es que

Module_Rewrite está habilitado en su servidor (LAMP, WAMP, XAMP..etc) Para hacer el redireccionamiento de URL en yii2 framework Cree un archivo .htaccess y colóquelo en la carpeta / web

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

Segundo paso

Carpeta de configuración common/config/main-local.php add to components array

''urlManager'' => [ ''class'' => ''yii/web/UrlManager'', // Disable index.php ''showScriptName'' => false, // Disable r= routes ''enablePrettyUrl'' => true, ''rules'' => array( ''<controller:/w+>/<id:/d+>'' => ''<controller>/view'', ''<controller:/w+>/<action:/w+>/<id:/d+>'' => ''<controller>/<action>'', ''<controller:/w+>/<action:/w+>'' => ''<controller>/<action>'', ), ],


Lo que funcionó para mí-
crear un .htaccess en la carpeta raíz de mi proyecto Yii2, y agregué el siguiente

<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On </IfModule> <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} ^/.* RewriteRule ^(.*)$ web/$1 [L] RewriteCond %{REQUEST_URI} !^/web/ RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ web/index.php </IfModule>

Se crearon nuevas carpetas web de archivo .htaccess con el siguiente contenido:

frontend/web/

y agregado siguiente-

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php

A continuación, agregó administrador de URL aquí-

projectFolder/common/config/main.php

Para mí no estaba allí, así que agregué esto como-

''urlManager'' => [ ''class'' => ''yii/web/UrlManager'', ''enablePrettyUrl'' => true, ''showScriptName'' => false, /* ''rules'' => [ ''<controller:/w+>/<id:/d+>'' => ''<controller>/view'', ''<controller:/w+>/<action:/w+>/<id:/d+>'' => ''<controller>/<action>'', ''<controller:/w+>/<action:/w+>'' => ''<controller>/<action>'', ],*/ ],

Asegúrese de que este código debe estar en ''components'' => [] .

Reinicie mi servidor y todo funciona bien.


No sé por qué ustedes simplemente no van a la carpeta del proveedor yii2 y establecen public $ enablePrettyUrl = true; "(junto con el cambio de htaccess, por supuesto). Eso funcionó bien para mí y es mucho más simple. tener UN archivo htaccess - en la raíz del proyecto, no en 3 lugares diferentes. Además, cuando hice lo que sugirieron para los programas ''config / main.php'' en Advanced Yii2, no funcionó. Sacó el ying-yang. Lo saqué, y prettyUrls funcionó bien de nuevo. Tal vez no debería hacerlo de esta manera debido a la actualización de Composer, pero hay tantas soluciones "falsas" a esto que me cansé de lidiar con eso.


Para mí, el problema fue:

  1. Falta .htaccess en la carpeta web como se mencionó anteriormente.
  2. La directiva AllowOverride se estableció en None, que deshabilitó las reescrituras de URL. Lo cambié a Todo y ahora las URL bonitas funcionan bien.

<Directory "/path/to/the/web/directory/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory>


Paso 1: en project config / main.php ej: frontend / config / main.php

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

Paso 2: crear la carpeta web insertada del archivo .htaccess, por ejemplo: frontend / web

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 #php_flag display_errors on #php_value error_reporting 2039


Primero, cree un .htaccess en la carpeta raíz de su proyecto Yii2 con el siguiente contenido:

Options +Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ frontend/web/$1 [L] </IfModule> # Deny accessing below extensions <Files ~ "(.json|.lock|.git)"> Order allow,deny Deny from all </Files> # Deny accessing dot files RewriteRule (^/.|//.) - [F]

Cree otro archivo .htaccess en sus carpetas web con el siguiente contenido:

frontend/web/ add backend/web/ No olvide agregar el archivo .htaccess a ambas carpetas web:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php

Ahora está hecho. Cambie su configuración de URL en Yii2:

<?php use /yii/web/Request; $baseUrl = str_replace(''/frontend/web'', '''', (new Request)->getBaseUrl()); $config = [ ''components'' => [ ''request'' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation ''cookieValidationKey'' => ''aiJXeUjj8XjKYIG1gurMMnccRWHvURMq'', ''baseUrl'' => $baseUrl, ], "urlManager" => [ ''baseUrl'' => $baseUrl, ''enablePrettyUrl'' => true, ''showScriptName'' => false, "rules" => [ "home" => "site/index", "about-us" => "site/about", "contact-us" => "site/contact", ] ] ], ]; return $config;

Su URL cambiará a:

localhost/yii2project/site/about => localhost/yii2project/about-us localhost/yii2project/site/contact => localhost/yii2project/contact-us localhost/yii2project/site/index => localhost/yii2project/home

Puede acceder a su administrador a través de

localhost/yii2project/backend/web


Solo para agregar a esta discusión: acabo de instalar Yii2, e incluye el siguiente código comentado en config / web.php:

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

Si agrega el archivo .htaccess en la respuesta aceptada, simplemente elimine el comentario anterior, las URL bonitas funcionarán (no tengo idea para qué son las "reglas" en la respuesta aceptada, pero todo parece funcionar sin ellas).


en nginx configure así

location / { try_files $uri $uri/ /index.php$is_args$args; }


Instrucción paso a paso

Paso 1

En la raíz del proyecto, agregue un .htaccess con el siguiente contenido:

Options +FollowSymLinks IndexIgnore */* RewriteEngine On RewriteCond %{REQUEST_URI} !^/(web) RewriteRule ^assets/(.*)$ /web/assets/$1 [L] RewriteRule ^css/(.*)$ web/css/$1 [L] RewriteRule ^js/(.*)$ web/js/$1 [L] RewriteRule ^images/(.*)$ web/images/$1 [L] RewriteRule (.*) /web/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /web/index.php

Paso 2

En la carpeta / web, agregue un archivo .htaccess con el siguiente contenido:

RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php

Paso 3

En el archivo /config/web.php en los componentes de los elementos de la matriz, agregue el siguiente código:

''request'' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation ''cookieValidationKey'' => ''yYy4YYYX8lYyYyQOl8vOcO6ROo7i8twO'', ''baseUrl'' => '''' ], //... ''urlManager'' => [ ''enablePrettyUrl'' => true, ''showScriptName'' => false, ''rules'' => [ '''' => ''site/index'', ''<controller:/w+>/<action:/w+>/'' => ''<controller>/<action>'', ], ],

Hecho..


Paso 1: coloca el archivo .htaccess en la raíz.

Options –Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ frontend/web/$1 [L] </IfModule> # Deny accessing below extensions <Files ~ "(.json|.lock|.git)"> Order allow,deny Deny from all </Files> # Deny accessing dot files RewriteRule (^/.|//.) - [F]

Paso 2: coloca el archivo .htaccess en la frontend/web .

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

Paso 3: Luego cambia en frontend/config/main.php . El siguiente código debe ser agregado dentro de ''components'' => [] .

''request'' => [ ''csrfParam'' => ''_csrf-frontend'', ''baseUrl'' => ''/yii-advanced'', //http://localhost/yii-advanced ], ''urlManager'' => [ ''class'' => ''yii/web/UrlManager'', ''showScriptName'' => false, // Disable index.php ''enablePrettyUrl'' => true, // Disable r= routes ''rules'' => array( ''about'' => ''site/about'', ''service'' => ''site/service'', ''contact'' => ''site/contact'', ''signup'' => ''site/signup'', ''login'' => ''site/login'', ), ],

Los pasos anteriores están trabajados para mí.


Lo tengo trabajando en yii2. Habilita mod_rewrite para Apache . Para basic template haga lo siguiente: Cree un archivo .htaccess en la carpeta web y agregue este

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 dentro de la carpeta de configuración, en web.php agregar a los componentes

''urlManager'' => [ ''class'' => ''yii/web/UrlManager'', // Disable index.php ''showScriptName'' => false, // Disable r= routes ''enablePrettyUrl'' => true, ''rules'' => array( ''<controller:/w+>/<id:/d+>'' => ''<controller>/view'', ''<controller:/w+>/<action:/w+>/<id:/d+>'' => ''<controller>/<action>'', ''<controller:/w+>/<action:/w+>'' => ''<controller>/<action>'', ), ],

En el caso de advanced template cree los archivos .htaccess dentro de las carpetas backend/web y frontend/web y agregue el componente urlManager dentro de common/config/main.php