Patrón (\w+): Significa "una o más palabras" (letras, números o guiones bajos). Patrón (\d+): Significa "uno o más dígitos" (números). 1. Configuración Básica (web.php) Este es el fragmento de código inicial que debe estar presente en el array 'components' del archivo de configuración para activar el sistema de URLs bonitas: // En web.php, dentro de 'components' 'components' => [ 'urlManager' => [ // Habilita URLs amigables 'enablePrettyUrl' => true, // Oculta index.php 'showScriptName' => false, // Desactiva el análisis estricto por defecto 'enableStrictParsing' => false, 'rules' => [ // Tus reglas personalizadas aquí ], ], ], 2. Reglas Simples y con Parámetros Las reglas se definen dentro del array 'rules' y mapean una URL externa a una ruta interna (Controlador/Acción). 'rules' => [ // 1. URL simple (Ejemplo: http://ejemplo.com/posts) 'posts' => 'post/index', // 2. URL con un parámetro numérico para ID (Ejemplo: http://ejemplo.com/post/123) // El patrón \d+ asegura que el parámetro <id> sea un número. 'post/<id:\d+>' => 'post/view', // 3. URL con slugs (letras, números y guiones) (Ejemplo: http://ejemplo.com/articulo/mi-titulo-genial) 'articulo/<slug:[-a-zA-Z0-9]+>' => 'post/view', // 4. Múltiples parámetros (Ejemplo: http://ejemplo.com/categoria/5/post/101) 'categoria/<catId:\d+>/post/<postId:\d+>' => 'post/view', // 5. Fechas (Año de 4 dígitos y Mes de 2 dígitos) (Ejemplo: http://ejemplo.com/noticias/2024/05) 'noticias/<year:\d{4}>/<month:\d{2}>' => 'news/archive', // 6. Reglas para parámetros opcionales (Para paginación) 'blog/<page:\d+>' => 'post/index', 'blog' => 'post/index', ], 3. Reglas Avanzadas y de Redirección Este ejemplo muestra cómo se define una regla con un sufijo específico (.html) y cómo configurar redirecciones: 'urlManager' => [ // ... configuración básica ... 'enableStrictParsing' => true, // Solo permite las URLs definidas aquí [3] 'suffix' => '.html', // Agrega el sufijo .html a todas las URLs (global) [3] 'rules' => [ // Regla que sobreescribe el sufijo global, o lo aplica [3] [ 'pattern' => 'post/<slug:[-a-zA-Z0-9]+>', 'route' => 'post/view', 'suffix' => '.html', ], // Redirección de URLs antiguas 'antigua-url' => 'site/redirect', // Regla para páginas estáticas 'pagina/<view:[a-zA-Z]+>' => 'site/page', ], ], 4. Reglas RESTful (APIs y Verbos HTTP) Estas reglas permiten que una misma URL (api/posts) tenga diferentes comportamientos dependiendo del método (verbo HTTP) usado (GET, POST, PUT, DELETE): 'rules' => [ // Usa la clase UrlRule para generar reglas REST automáticamente para el controlador 'api/user' [4] [ 'class' => 'yii\rest\UrlRule', 'controller' => 'api/user', ], // Reglas explícitas para APIs RESTful 'GET api/posts' => 'post/list', 'POST api/posts' => 'post/create', 'PUT api/posts/<id:\d+>' => 'post/update', 'DELETE api/posts/<id:\d+>' => 'post/delete', ], 5. Uso del Código en Vistas y Controladores Una vez que las reglas están definidas en web.php, Yii2 utiliza estas reglas para generar las URLs correctas dentro de la aplicación: En Vistas (Generando enlaces): <?= Html::a('Ver post', ['post/view', 'id' => $post->id, 'slug' => $post->slug]) ?> • Resultado: Si existe la regla 'post/<id:\d+>' => 'post/view', esto generaría una URL como /post/123. En Controladores (Redirecciones): return $this->redirect(['post/view', 'id' => $id]); • Resultado: Esto redirige al usuario a la URL amigable correspondiente a la acción post/view con el ID especificado.