@evgen9586
Backend-dev. Лублу Enterprise и не люблю понты)

Почему Не работают ЧПУ Yii2?

Изучаю фреймворк Yii2 basic. И вроде как всё прекрасно, но на старте не работали ЧПУ и тогда я решил забить на эту проблему и изучать дальше, но сейчас всё же решил вернуться.

Веб-сервер я использую wamp64.

Сайт лежит в папке site.

И того корневой каталог получается localhost/site/web

Раскоментировал я
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],


Добавил в корень переадресацию на веб
RewriteEngine On
RewriteRule ^(.+)?$ /web/$1


В web-е ещё один файл .hcaccess
RewriteBase /

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d

RewriteRule . index.php


Фиг с неподгруженными стилями и скриптами но при переходе на другую страницу создаётся вот такая ссылка
http://localhost/site/web/site/contact

Куда оно ещё впиндюривает папку сайта. Как это исправить чтобы работали корректно ЧПУ?
  • Вопрос задан
  • 994 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Переименуйте директорию site, придумайте название для этого локального проекта потому, что в views есть директория site, к которой обращается контроллер SiteController.
Пусть новое название будет mysite.
В этой директории Вы расположите весь свой проект на yii2.
Потом, в корень своего проекта положите .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>

А в директории проекта web оставьте такой:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Теперь, в файле config/web.php сделайте следующее:
use \yii\web\Request;
$baseUrl = str_replace('/web', '', (new Request)->getBaseUrl());
return [
   'components' => [
       'request' => [
           'baseUrl' => $baseUrl,
       ],
   ],

];

Это даст Вам возможность копировать файл конфигурации в разные свои проекты не заботясь о названии директории, в которой будет находиться проект.
А в urlManager напишите первое, главное правило
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                  '' => 'site/index'
            ],
        ],

Тогда при переходе по адресу localhost/mysite у Вас должна будет открыться главная страница Вашего проекта, без "web" в адресной строке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
'components' => [
       'request' => [
            'baseUrl' => '',
        ],
]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы