Включить чистый URL в Yii2
Как включить чистые URL-адреса в Yii2. Я хочу удалить индекс.php и? из параметров URL. Какой раздел необходимо отредактировать в Yii2 для этого?
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-us
localhost/yii2project/site/contact
=>localhost/yii2project/contact-us
localhost/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, это не сработало. Я достал 404 из Инь-Янь. Я вытащил его, и prettyUrls снова отлично сработал. Может Быть, Я не следует делать это таким образом из-за обновления Composer, но есть так много "фиктивных" решений для этого, что я устал от этого.