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?

55
demandé sur Prakash Pazhanisamy 2014-10-23 13:42:07

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

141
répondu user7282 2018-03-19 19:45:17

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>',
   ),
],
13
répondu Sijo Thomas Maprayil 2018-03-19 22:05:24

Pour moi, le problème était:

  1. manquant .htaccess dans le dossier web comme mentionné ci-dessus.
  2. 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>
12
répondu pkout 2015-05-01 17:07:02

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

6
répondu Ilyas karim 2018-04-05 07:35:57

Sur Nginx configurer comme ça

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}
2
répondu rakhmatov 2016-08-06 16:31:12

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).

2
répondu Vanessa Deagan 2018-03-20 11:43:25

É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.

1
répondu Prakash Pazhanisamy 2018-03-20 13:12:03

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

0
répondu CollinsKe 2017-11-16 11:39:44

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.

0
répondu S.Yadav 2018-03-19 18:31:04

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
0
répondu jokeblack 2018-04-05 07:59:28

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.

-3
répondu McAuley 2017-09-27 19:42:11