@evgen9586
Изучаю Back-end программирование

Почему Не работают ЧПУ 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

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

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

Войти через TM ID
Похожие вопросы