it-swarm.com.de

Aktivieren Sie die saubere URL in Yii2

Wie kann ich saubere URLs in Yii2 aktivieren? Ich möchte index.php und '?' Entfernen von URL-Parametern. Welcher Abschnitt muss dafür in Yii2 bearbeitet werden?

58
user7282

Ich habe es in yii2 zum Laufen gebracht. Aktivieren Sie mod_rewrite für Apache. Gehen Sie für basic template folgendermaßen vor: Erstellen Sie eine .htaccess-Datei im Webordner und fügen Sie diese hinzu

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

Dann im Konfigurationsordner in web.php zu den Komponenten hinzufügen

'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>',
    ),
],

Im Fall von advanced template erstellen Sie die .htaccess-Dateien in den backend/web- und frontend/web-Ordnern und fügen die urlManager-Komponente in common/config/main.php hinzu.

146
user7282

Für mich war das Problem:

  1. Fehlender .htaccess im Webordner wie oben erwähnt.
  2. Die AllowOverride-Direktive wurde auf None festgelegt, wodurch die URL-Umschreibung deaktiviert wurde. Ich habe es in All geändert und nun funktionieren hübsche URLs gut.
<Directory "/path/to/the/web/directory/">
  Options Indexes 
  FollowSymLinks MultiViews 
  AllowOverride All 
  Require all granted
</Directory>
13
pkout

Erster wichtiger Punkt ist das

Module_Rewrite ist auf Ihrem Server aktiviert (LAMP, WAMP, XAMP..etc). Für URL-Neuverkabelung im yii2-Framework Erstellen Sie eine .htaccess-Datei und legen Sie sie im Ordner/web ab

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

Zweiter Schritt

Konfigurationsordner common/config/main-local.php zum Komponentenarray hinzufügen

'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

Erstellen Sie zunächst in Ihrem Yii2-Projekt einen .htaccess im Stammverzeichnis mit folgendem Inhalt:

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]

Erstellen Sie eine weitere .htaccess-Datei mit folgenden Inhalten in Ihren Webordnern:

frontend/web/addbackend/web/ Vergessen Sie nicht, die .htaccess-Datei zu beiden Webordnern hinzuzufügen:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php

Jetzt ist es fertig. Ändern Sie Ihre URL-Konfiguration in 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;

Ihre URL ändert sich in:

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

Sie können auf Ihren Admin über zugreifen

localhost/yii2project/backend/web

8
Ilyas karim

Um diese Diskussion noch hinzuzufügen, habe ich gerade Yii2 installiert und es enthält den folgenden auskommentierten Code in config/web.php:

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

Wenn Sie die .htaccess-Datei in die akzeptierte Antwort einfügen, machen Sie einfach die unkommentierten obigen Angaben, hübsche URLs funktionieren (ich habe keine Ahnung, für welche "Regeln" die akzeptierte Antwort gilt, aber es scheint alles ohne sie zu funktionieren).

2
Vanessa Deagan

auf nginx so konfigurieren

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

Schritt 1: .htaccess-Datei in das Stammverzeichnis einfügen.

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]

Schritt 2: .htaccess-Datei in frontend/web einfügen.

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

Schritt 3: Ändert dann frontend/config/main.php. Folgender Code muss in 'components' => [] eingefügt werden.

'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',
  ),
],

Die obigen Schritte werden für mich ausgeführt.

1

Schritt 1: in Projekt config/main.php zB: frontend/config/main.php

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

Schritt 2: Erstellen Sie einen .htaccess-Datei-Inset-Webordner, z

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
jokeblack

Was für mich funktioniert hat-
Erstellen Sie im Stammordner meines Yii2-Projekts einen .htaccess.

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

Neue .htaccess-Datei-Webordner mit folgendem Inhalt erstellt:

frontend/web/

und hinzugefügt

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

Dann hinzugefügt URL-Manager hier-

projectFolder/common/config/main.php

Für mich war es nicht da.

'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>',

    ],*/
],

Stellen Sie sicher, dass dieser Code in 'components' => [] sein muss.

Starten Sie meinen Server neu und alles funktioniert gut.

0
S.Yadav

Schritt-für-Schritt-Anleitung

Schritt 1

Fügen Sie im Stammverzeichnis des Projekts eine .htaccess-Datei mit folgendem Inhalt hinzu:

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

Schritt 2

Fügen Sie im Ordner/web eine .htaccess-Datei mit folgendem Inhalt hinzu:

RewriteEngine On RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

Schritt 3

Fügen Sie in der Datei /config/web.php in den Elementkomponenten des Arrays folgenden Code hinzu:

'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>',
    ],
],

Erledigt..

0
CollinsKe