Activer l'URL propre dans Yii2
Comment puis-je activer les URL propres dans Yii2. Je veux supprimer index.php et '?"à partir des paramètres d'url. Quelle section doit être éditée dans Yii2 pour cela?
11 réponses
Je l'ai fait travailler dans yii2. Activer mod_rewrite
pour Apache
.
Pour basic template
procédez comme suit:
Créer un .fichier htaccess dans le dossier web et ajoutez ceci
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
Puis dans le dossier config, dans le web.php Ajouter aux composants
'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>',
),
],
Dans le cas de advanced template
créer le .htaccess
fichiers à l'intérieur de backend/web
et frontend/web
dossiers et ajoutez urlManager
du composant à l'intérieur de common/config/main.php
Le premier point important est que
Module_Rewrite est activé sur votre serveur (LAMP,WAMP, XAMP..etc) Pour faire le recâblage D'URL dans le cadre de yii2 en créer un .fichier htaccess et mettre dans le dossier / 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
Deuxième étape
Dossier de configuration common/config/main-local.php
Ajouter au tableau de composants
'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>',
),
],
Pour moi, le problème était:
- manquant .htaccess dans le dossier web comme mentionné ci-dessus.
- la directive AllowOverride a été définie sur None, ce qui a désactivé les réécritures D'URL. Je l'ai changé pour tout et maintenant les jolies URL fonctionnent bien.
<Directory "/path/to/the/web/directory/">
Options Indexes
FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
Tout d'abord, créez un dossier .htaccess
at racine dans votre projet Yii2 avec le contenu suivant:
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]
Créez un autre fichier .htaccess
dans vos dossiers web avec le contenu suivant:
frontend/web/
ajouter backend/web/
N'oubliez pas d'ajouter le fichier .htaccess
aux deux dossiers web:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Maintenant c'est fait. Modifier la configuration de votre URL dans 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;
Votre URL deviendra:
localhost/yii2project/site/about
=> localhost/yii2project/about-us
localhost/yii2project/site/contact
=> localhost/yii2project/contact-us
localhost/yii2project/site/index
=> localhost/yii2project/home
Vous peut accéder à votre administrateur via
localhost/yii2project/backend/web
Sur Nginx configurer comme ça
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
Juste pour ajouter à cette discussion-je viens d'installer Yii2, et il inclut le code commenté suivant dans config/web.php:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [],
],
Si vous ajoutez le .fichier htaccess dans la réponse acceptée, puis décommentez simplement ce qui précède, les jolies URL fonctionneront (Je n'ai aucune idée de ce que sont les" règles " dans la réponse acceptée, mais tout semble fonctionner sans eux).
Étape 1: Mettez le fichier .htaccess
à la racine.
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]
Étape 2: Mettez .htaccess
fichier 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
Étape 3:, Puis des changements dans frontend/config/main.php
. Code suivant doit être ajouté à l'intérieur 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',
),
],
Les étapes ci-dessus sont travaillées pour moi.
Instructions étape par étape
Étape 1
, À la racine du projet, ajouter un .htaccess avec le contenu suivant:
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
Étape 2
Dans le dossier /Web ajouter un .fichier htaccess avec le contenu suivant:
RewriteEngine On RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Étape 3
Dans le fichier /config/web.php dans les composants de l'élément du tableau ajouter le code suivant:
'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>',
],
],
Fait..
Ce qui a fonctionné pour moi-
créer un .htaccess dans le dossier racine de mon projet Yii2, et ajouté suivant -
<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>
Créé nouveau .dossiers Web de fichiers htaccess avec le contenu suivant:
frontend/web/
Et ajouté suivant -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Puis ajouté urlmanager ici -
projectFolder/common/config/main.php
Pour moi, il n'était pas là, donc ajouté ce que-
'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>',
],*/
],
Assurez-vous que ce code doit être dans 'components' => []
.
Redémarrez mon serveur et tout fonctionne bien.
Etape 1: dans la configuration du projet / main.php par exemple: frontend/config/main.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [],
]
Etape 2: créer .fichier htaccess dossier Web encart par exemple: 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
Je ne sais pas pourquoi vous n'allez pas dans le dossier du fournisseur yii2 et définissez public $enablePrettyUrl = true;" (avec le changement htaccess, bien sûr). Qui a bien fonctionné pour moi et c'est beaucoup plus simple. Et j'ai un fichier htaccess-à la racine du projet, pas à 3 endroits différents. De plus, quand j'ai fait ce que vous avez suggéré pour le 'config / main.PHP ' programmes dans Advanced Yii2, cela n'a pas fonctionné. J'ai des 404 sur le ying-yang. Je l'ai sorti, et prettyUrls a bien fonctionné à nouveau. Peut-Être Que Je ne devrait pas le faire de cette façon en raison de la mise à jour du compositeur, mais il y a tellement de solutions "fausses" à cela que je suis fatigué de traiter avec elle.