it-swarm-eu.dev

Włącz czysty adres URL w Yii2

Jak mogę włączyć czyste adresy URL w Yii2. Chcę usunąć index.php i „?” z parametrów url. W której sekcji należy edytować w Yii2?

58
user7282

Mam to działa w Yii2. Włącz mod_rewrite dla Apache. W przypadku basic template wykonaj następujące czynności: Utwórz plik .htaccess w folderze internetowym i dodaj go

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

Następnie w folderze config w pliku web.php dodaj do komponentów

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

W przypadku advanced template utwórz pliki .htaccess wewnątrz backend/web i frontend/web folderów i dodaj urlManager komponent wewnątrz common/config/main.php

152
user7282

Dla mnie problemem był:

  1. Brakuje .htaccess w folderze internetowym, tak jak wspomniano powyżej.
  2. Dyrektywa AllowOverride została ustawiona na None, która wyłącza przepisywanie URL. Zmieniłem go na Wszystkie i teraz ładne adresy URL działają dobrze.
<Directory "/path/to/the/web/directory/">
  Options Indexes 
  FollowSymLinks MultiViews 
  AllowOverride All 
  Require all granted
</Directory>
13
pkout

Pierwszy ważny punkt jest taki

Moduł_Rewrite jest włączony na twoim serwerze (LAMP, WAMP, XAMP..etc) Do zmiany adresu URL w strukturze yii2 Utwórz jeden plik .htaccess i umieść w folderze/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

Drugi krok

Folder konfiguracyjny common/config/main-local.php dodaj do tablicy komponentów

'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

Najpierw utwórz .htaccess w folderze głównym swojego projektu Yii2 z następującą treścią:

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]

Utwórz kolejny plik .htaccess w swoich folderach internetowych z następującą treścią:

frontend/web/addbackend/web/ Nie zapomnij dodać pliku .htaccess do obu folderów internetowych:

RewriteEngine on

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

RewriteRule . index.php

Teraz to się skończyło. Zmień konfigurację adresu URL w 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;

Twój adres URL zmieni się na:

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

Możesz uzyskać dostęp do swojego administratora za pośrednictwem

localhost/yii2project/backend/web

8
Ilyas karim

Aby dodać do tej dyskusji - właśnie zainstalowałem Yii2 i zawiera on następujący komentarz w config/web.php:

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

Jeśli dodasz plik .htaccess do zaakceptowanej odpowiedzi, po prostu odkomentuj powyższe, ładne adresy URL będą działać (nie mam pojęcia, do czego służą „reguły” w zaakceptowanej odpowiedzi, ale wszystko wydaje się działać bez nich).

2
Vanessa Deagan

na nginx configure w ten sposób

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

Krok 1: Umieść plik .htaccess w katalogu głównym.

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]

Krok 2: Umieść plik .htaccess w 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

Krok 3: Następnie zmiany w frontend/config/main.php. Następujący kod należy dodać w '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',
  ),
],

Powyższe kroki są dla mnie wykonywane.

1

Krok 1: w projekcie config/main.php np .: frontend/config/main.php

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

Krok 2: utwórz folder sieciowy .htaccess, np .: 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
jokeblack

Co dla mnie działało
utwórz plik .htaccess w folderze głównym mojego projektu Yii2 i dodaj następujący-

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

Utworzono nowe foldery sieciowe plików .htaccess o następującej treści:

frontend/web/

i dodano następujące-

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

Następnie dodano tutaj urlmanager -

projectFolder/common/config/main.php

Dla mnie tam nie było, więc dodałem to jako-

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

    ],*/
],

Upewnij się, że ten kod musi być w 'components' => [].

Uruchom ponownie serwer i wszystko działa poprawnie.

0
S.Yadav

Instrukcja krok po kroku

Krok 1

W katalogu głównym projektu dodaj .htaccess o następującej treści:

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

Krok 2

W folderze/sieci dodaj plik .htaccess o następującej treści:

RewriteEngine On RewriteBase /

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

RewriteRule . index.php

Krok 3

W pliku /config/web.php w elementach komponentów tablicy dodaj następujący kod:

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

Gotowe..

0
CollinsKe