限时 5折! 详情
开启urmanager 后台(admin) debug工具消失,gii生成model时报错
8 153 2017-08-28
  • 环境:nginx
  • 版本:yii2.0
  • 前后台共用一个域名
  • 前台访问地址 my.yii.com
  • 后台访问地址 my.yii.com/admin
  • 开启urmanager 后台(admin) debug工具消失,gii生成model时报如下错误:“Bad Request (#400): Missing required parameters: id, file”。
  • urlManager 配置如下:
'urlManager' => [
            'enablePrettyUrl' => true,  //美化url==ture
            'enableStrictParsing' => false,  //不启用严格解析
            'showScriptName' => false,   //隐藏index.php
            'rules' => [
            ],
],
  • nginx 配置如下:
server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name my.yii.com;
    root        /var/www/html/advanced/;
    index       index.php;

    access_log  /var/www/html/advanced/log/access.log;
    error_log   /var/www/html/advanced/log/error.log;

    location / {
        root  /var/www/html/advanced/frontend/web;
        try_files  $uri /frontend/web/index.php$is_args$args;

        location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            access_log  off;
            expires  360d;
            try_files  $uri =404;
        }
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        try_files $uri =404;
    }

    location = /requirements.php {
        deny all;
    }

    location ~* /\. {
        deny all;
    }
}
  • 8 个回答
  • 你这后台是单独作为应用frontend的一个模块吗? “debug工具消失”,控制台打开,刷新页面,看是否有异常的请求。 另外,如果是advanced版,更推荐frontend作为一个应用,后台单独用backend作为一个应用。

  • 重新安装后和配置后,前后台正常正常了,但是:
    * http://my.yii.com/api/web/index.php?r=site%2Flogin 这样访问自定义应用正常
    * 开启URL美化后(访问 http://my.yii.com/api/site/login) nginx 报404
    * yii2-advanced 应用配置:
    <?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 [
        'homeUrl' => '/api',
        'id' => 'app-api',
        'basePath' => dirname(__DIR__),
        'controllerNamespace' => 'api\controllers',
        'bootstrap' => ['log'],
        'modules' => [],
        'components' => [
            'request' => [
                'baseUrl' => '/api',
                'csrfParam' => '_csrf-api',
            ],
            'user' => [
                'identityClass' => 'common\models\User',
                'enableAutoLogin' => true,
                'identityCookie' => ['name' => '_identity-api', 'httpOnly' => true],
            ],
            'session' => [
                // this is the name of the session cookie used for login on the api
                'name' => 'advanced-api',
            ],
            'log' => [
                'traceLevel' => YII_DEBUG ? 3 : 0,
                'targets' => [
                    [
                        'class' => 'yii\log\FileTarget',
                        'levels' => ['error', 'warning'],
                    ],
                ],
            ],
            'errorHandler' => [
                'errorAction' => 'site/error',
            ],
            'urlManager' => [
                'enablePrettyUrl' => true,  //美化url==ture
                'enableStrictParsing' => false,  //不启用严格解析
                'showScriptName' => false,   //隐藏index.php
                'rules' => [
                ],
            ],
        ],
        'params' => $params,
    ];
    
    * nginx 配置:
    server { charset utf-8; client_max_body_size 128M;
    server_name my.yii.com;
    root        /var/www/html/advanced/;
    index       index.php;
    
    access_log  /var/www/html/advanced/log/access.log;
    error_log   /var/www/html/advanced/log/error.log;
    
    location / {
        root  /var/www/html/advanced/frontend/web;
        try_files  $uri /frontend/web/index.php$is_args$args;
    
        # avoiding processing of calls to non-existing static files by Yii
        location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            access_log  off;
            expires  360d;
            try_files  $uri =404;
        }
    }
    
    location /admin {
        alias  /var/www/html/advanced/backend/web;
    
        rewrite  ^(/admin)/$ $1 permanent;
        try_files  $uri /backend/web/index.php?$args;
    }
    
    # avoiding processing of calls to non-existing static files by Yii
    location ~ ^/admin/(.+\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar))$ {
        access_log  off;
        expires  360d;
    
        rewrite  ^/admin/(.+)$ /backend/web/$1 break;
        rewrite  ^/admin/(.+)/(.+)$ /backend/web/$1/$2 break;
        try_files  $uri =404;
    }
    
    location /api {
        alias  /var/www/html/advanced/api/web;
    
        rewrite  ^(/api)/$ $1 permanent;
        try_files  $uri /api/web/index.php?$args;
    }
    
    # avoiding processing of calls to non-existing static files by Yii
    location ~ ^/api/(.+\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar))$ {
        access_log  off;
        expires  360d;
    
        rewrite  ^/api/(.+)$ /api/web/$1 break;
        rewrite  ^/api/(.+)/(.+)$ /api/web/$1/$2 break;
        try_files  $uri =404;
    }
    
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        try_files $uri =404;
    }
    
    location = /requirements.php {
        deny all;
    }
    
    location ~* /\. {
        deny all;
    }
    }

  • nginx的rewrite规则参考

    try_files $uri $uri/ /index.php$is_args$args;

  • 还是不行啊,前后台正常,访问api nginx报404。

    
    server {
        charset utf-8;
        client_max_body_size 128M;
    
        listen 80; ## listen for ipv4
        #listen [::]:80 default_server ipv6only=on; ## listen for ipv6
    
        server_name my.yii.com;
        root        /var/www/html/advanced/;
        index       index.php;
    
        access_log  /var/www/html/advanced/log/access.log;
        error_log   /var/www/html/advanced/log/error.log;
    
        location / {
            root  /var/www/html/advanced/frontend/web;
            try_files  $uri /frontend/web/index.php$is_args$args;
    
            # avoiding processing of calls to non-existing static files by Yii
            location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
                access_log  off;
                expires  360d;
                try_files  $uri =404;
            }
        }
    
        location /admin {
            alias  /var/www/html/advanced/backend/web;
    
            rewrite  ^(/admin)/$ $1 permanent;
            try_files  $uri /backend/web/index.php$is_args$args;
        }
    
        # avoiding processing of calls to non-existing static files by Yii
        location ~ ^/admin/(.+\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar))$ {
            access_log  off;
            expires  360d;
    
            rewrite  ^/admin/(.+)$ /backend/web/$1 break;
            rewrite  ^/admin/(.+)/(.+)$ /backend/web/$1/$2 break;
            try_files  $uri =404;
        }
    
        location /api {
            alias  /var/www/html/advanced/api/web;
    
            rewrite  ^(/api)/$ $1 permanent;
            try_files  $uri /api/web/index.php$is_args$args;
        }
    
        # avoiding processing of calls to non-existing static files by Yii
        location ~ ^/api/(.+\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar))$ {
            access_log  off;
            expires  360d;
    
            rewrite  ^/api/(.+)$ /api/web/$1 break;
            rewrite  ^/api/(.+)/(.+)$ /api/web/$1/$2 break;
            try_files  $uri =404;
        }
    
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            try_files $uri =404;
        }
    
        location = /requirements.php {
            deny all;
        }
    
        location ~* /\. {
            deny all;
        }
    }
    

  • 确定是路由解析无效吗? 很多新手刚开始配置很容易404,有配置出错的,访问出错的,有时间建议多看几遍这篇文章,认真跟着配置下来一定是没问题的。

  • 前后台正常,访问api,不开启urlManager的话也能正常访问,开启后直接404,是nginx 404,不是yii

  • 你给的这篇文章看过了, 现在都到不了使用restful风格接口的那步,这篇文章介绍的确实是我最终要做的事。前提是如何能让我正常访问api,然后我开始学习写接口。

  • 正常访问的前提是api应用要先配置起来,404就是配置有问题,这个问题有可能有很多种,所以需要你跟着我上面给的文章链接,耐心细心的多操作几遍。

登录 去赚佣金