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:
- Falta .htaccess en la carpeta web como se mencionó anteriormente.
- 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