11 ответов:
я получил его работу в yii2. Включить
mod_rewriteнаApache. Ибоbasic templateвыполните следующие действия: Создать .htaccess файл в веб-папке и добавить это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затем в папку config, в интернете.php добавить в компоненты
'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>', ), ],в случае
advanced templateсоздать.htaccessфайлы внутриbackend/webиfrontend/webпапки и добавитьurlManagerкомпонент внутриcommon/config/main.php
первый важный момент заключается в том, что
Module_Rewrite включен на вашем сервере (LAMP,WAMP,XAMP..так далее) Для перемотки URL-адреса в Yii2 framework создайте его .htaccess файл и положить в папку 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второй шаг
папку config
common/config/main-local.phpдобавить в массив компонентов'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>', ), ],
для меня проблема была:
- отсутствует .htaccess в веб-папке так же, как указано выше.
- директива AllowOverride была установлена в None, что отключило перезапись URL. Я изменил его на все, и теперь довольно URL-адреса работают хорошо.
<Directory "/path/to/the/web/directory/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory>
во-первых, создать
.htaccessв корневой папке вашего проекта Yii2 со следующим содержимым:Options +Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ frontend/web/ [L] </IfModule> # Deny accessing below extensions <Files ~ "(.json|.lock|.git)"> Order allow,deny Deny from all </Files> # Deny accessing dot files RewriteRule (^\.|/\.) - [F]создать еще один
.htaccessфайл в ваших веб-папках со следующим содержимым:
frontend/web/добавитьbackend/web/Не забудьте добавить.htaccessфайл как веб-папки:RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
теперь это сделано. Изменение конфигурации URL-адрес в коде с 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;
Ваш URL-адрес будет меняться к:
localhost/yii2project/site/about=>localhost/yii2project/about-uslocalhost/yii2project/site/contact=>localhost/yii2project/contact-uslocalhost/yii2project/site/index=>localhost/yii2project/homeвы можете получить доступ к админке через
localhost/yii2project/backend/web
просто чтобы добавить к этому обсуждению - я только что установил Yii2, и он включает в себя следующий закомментированный код в config/web.php:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [], ],Если вы добавляете .файл htaccess в принятом ответе, а затем просто раскомментируйте выше, довольно URL-адреса будут работать (я понятия не имею, для чего нужны "правила" в принятом ответе, но все, кажется, работает без них).
Шаг 1: поставить
.htaccessфайл в корне.Options –Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ frontend/web/ [L] </IfModule> # Deny accessing below extensions <Files ~ "(.json|.lock|.git)"> Order allow,deny Deny from all </Files> # Deny accessing dot files RewriteRule (^\.|/\.) - [F]Шаг 2: поставить на
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Шаг 3: затем в
frontend/config/main.php. Следующий код должен быть добавлен внутри'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', ), ],выше шаги работают для меня.
пошаговую инструкцию
Шаг 1
в корне проекта добавьте a .htaccess со следующим содержимым:
Options +FollowSymLinks IndexIgnore */* RewriteEngine On RewriteCond %{REQUEST_URI} !^/(web) RewriteRule ^assets/(.*)$ /web/assets/ [L] RewriteRule ^css/(.*)$ web/css/ [L] RewriteRule ^js/(.*)$ web/js/ [L] RewriteRule ^images/(.*)$ web/images/ [L] RewriteRule (.*) /web/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /web/index.phpШаг 2
в папке /web добавить a .htaccess файл со следующим содержимым:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.phpШаг 3
в файле / config / web.php в элементных компонентах массива добавляет следующий код:
'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>', ], ],сделано..
что сработало для меня -
создать .htaccess в корневой папке моего проекта Yii2, и добавил следующее -<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On </IfModule> <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} ^/.* RewriteRule ^(.*)$ web/ [L] RewriteCond %{REQUEST_URI} !^/web/ RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ web/index.php </IfModule>создал новый .htaccess файл веб-папки со следующим содержанием:
frontend/web/и добавил следующее -
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.phpзатем добавлен urlmanager здесь -
projectFolder/common/config/main.phpдля меня это не было, поэтому добавил Это-
'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>', ],*/ ],убедитесь, что этот код должен быть в
'components' => [].перезагрузить сервер и все работать отлично.
Шаг 1: в конфигурации проекта/main.php например: frontend / config / main.php
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [], ]Шаг 2: создать .htaccess файл вставка веб-папки, например: 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
Я не знаю, почему вы, ребята, просто не заходите в папку поставщика yii2 и не устанавливаете public $enablePrettyUrl = true;" (вместе с изменением htaccess, конечно). Это отлично сработало для меня, и это намного проще. И у меня один файл htaccess-в корне проекта, а не в 3 разных местах. Плюс, когда я сделал то, что вы, ребята, предложили для 'config/main.php ' программы в Advanced Yii2, это не сработало. Я получил 404s из Ин-Ян. Я вынул его, и prettyUrls снова работал нормально. Может Быть, Я не следует делать это таким образом из-за обновления композитора, но есть так много "фиктивных" решений для этого, что я устал от этого.
Comments