@scanerrr
I am a doctor

Как включить pretty url yii2?

Всем привет
делаю rest api на шаблоне yii2-basic, встала задача залить сделанное на хостинг
стоит оговорится, что на локалке стоит openserver и локальный домен "смотрит" в папку web
и pretty url работают

5b729d61bf24c242966167.png

но на хостинге сайт выдает ошибку exception 'yii\web\NotFoundHttpException' with message 'Page not found.' in /api/vendor/yiisoft/yii2/web/Request.php:284

5b729e40b7484826349761.png

Если url manager выключить, то все на хостинге работает, следовательно проблема может быть в менеджере

конфиг выглядит так:
$config = [
    'id' => 'api-artpix',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],

    'components' => [
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'response' => [
            'formatters' => [
                'json' => [
                    'class' => 'yii\web\JsonResponseFormatter',
                    'prettyPrint' => YII_DEBUG,
                    'encodeOptions' => JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE,
                ],
            ],
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => false,
            'enableSession' => false,
        ],

        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => $db,

        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                'create' => 'order/create',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>'
            ],
        ],

    ],
    'params' => $params,
];


.htaccess в корне
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(web)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /web/$1 [L]

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


.htaccess в web
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php


Пробовал сменить чтобы домен на хостинге тоже "смотрел" в папку web, но тогда сервер начинает выдавать 500 ошибку
  • Вопрос задан
  • 1345 просмотров
Решения вопроса 1
@scanerrr Автор вопроса
I am a doctor
Нашел решение
в папке web изменил htaccess на

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


И все заработало

Спасибо Максим Тимофеев, что направил в нужную сторону
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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