Я изменил свой $defaultRoute
в моей конфигурации, который выглядит так. Это соответствует моему контроллеру AdminController
по умолчанию? Я получаю ошибку 404
Основной-local.php
<?php
$config = [
'defaultRoute' => 'admin/index',
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'b0pQ7nOuVjCprrOGrTarC-ErVMHUWQbb',
],
],
];
if (!YII_ENV_TEST) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = 'yii\debug\Module';
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = 'yii\gii\Module';
}
return $config;
Я тестирую свое приложение на localhost, но у меня все еще есть моя основная конфигурация с корнем по умолчанию.
main.php
<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-backend',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'backend\controllers',
'bootstrap' => ['log'],
'defaultRoute' => 'admin/index',
'modules' => [],
'components' => [
'user' => [
'identityClass' => 'backend\models\Admin',
'enableAutoLogin' => true,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'admin/error',
],
],
'params' => $params,
];
Мой .htaccess
имеет следующий код:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if request begins with /admin remove admin and ad /backend/web/
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin\/?(.*) /backend/web/$1
# other requests add /frontend/web/$1
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
RewriteRule (.*) /frontend/web/$1
# if frontend request
RewriteCond %{REQUEST_URI} ^/frontend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /frontend/web/index.php
# if backend request
RewriteCond %{REQUEST_URI} ^/backend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/web/index.php
Также здесь мой код AdminController
:
<?php
namespace backend\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use backend\models\LoginForm;
use yii\filters\VerbFilter;
class AdminController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
/**
* @inheritdoc
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
public function actionIndex()
{
return $this->render('index');
}
public function actionLogin()
{
if (!\Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
public function actionLogout()
{
Yii::$app->user->logout();
return $this->goHome();
}
}
Я вставляю 'defaultRoute' => 'myController/myAction',
в неправильный файл. Я не хочу делать это на самом коде фреймворка, поэтому я очень благодарен за вашу помощь.
Ваше место размещения правильно для свойства defaultRoute.
Вы пытались установить его на что-то другое, кроме admin/index, у которого нет правила в вашем.htaccess?
Если это работает, вы знаете, что ваш.htaccess противоречит ему, и я попробую следующее.
Я бы удалил пользовательские правила.htaccess (я буду называть их блоками 1,2,4) по одному, оставив остальные блоки. Если это не сработает, удалите 1 & 2 вместе; то я попробую все. Делая это, это должно помочь вам сузить проблему.
Обратите внимание: если вы удалите правила, вам придется соответствующим образом скорректировать ваш URL-адрес для тестов (т.е. Добавить backend/web/back to url, чтобы yourAppName/backend/web должен был довести вас до вашего admin/index) У вас есть правила удаления бэкэнда/веб-страницы из вашего URL-адреса для вас.
Если это не.htaccess, тогда это должен быть какой-то другой код, который у вас есть в вашем приложении, которое является обычным.
Вот правило.htaccess для удаления.index
#Use if on shared hosting and this not in the root folder.
#RewriteBase /
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
defaultRoute.
Так что это помогло мне сделать шаг вперед. Я ввел тест Settings
контроллера, и он на самом деле работает. Проблема в том, что когда я переключаюсь обратно на свой контроллер администратора, он перенаправляет на index.php?r=site/login.
Хотя я еще не выяснил, почему.
Выньте это из main-local.php
Внутри main.php он находится в правильном месте.
'defaultRoute' => 'admin/index',
Обратите внимание, что вам нужно разместить AdminController в каталоге @backend/controller, как указано в этом утверждении в коде.
'controllerNamespace' => 'backend\controllers',