2019-03-06 14:45:07 2152次浏览 2条回答 0 悬赏 10 金钱

旧项目未使用框架是直接访问 php 脚本,现在想在项目中加入 Yii2 框架后 ,新功能使用 Yii2 开发;
现在想使用 localhost/controller/action 的方式直接访问,但是服务根目录需要指定到 Yii2 目录的上级
目录结构为 webroot/yii2/web

想请教要怎么样设置才能不影响旧的地址访问,也能实现路径中不带 yii2/web Yii2 框架内容的访问

补充于 2019-03-07 09:51

我已经通过查询文档实现在旧项目中增加yii2 框架,步骤如下,但不知道这样做是否会引起其他问题
增加yii2到原项目中
在yii2 加入到项目中后 就可以直接使用子目录直接访问yii2中的内容,host/yii2/web/index.php?r=site/index
如果需要使用不带子目录的 pathinfo 方式访问 host/site/index ,需要配置如下几点

  1. 配置apache 或nginx 的rewrite,如果文件存在直接使用,否则进入yii2 处理
    我是使用的nginx:

    location / {  
    
     if (!-e $request_filename) {
         rewrite  ^(.*)$  /yii2/web/index.php?r=$1  last;
         break;
    
     }
    }
    
  2. 配置yii2 config
    开户url 美化 ,不开启的话yii2 生成的url会带r 参数

    'urlManager' => [
     'enablePrettyUrl' => true,
     'showScriptName' => false,
     'rules' => [ //可以定义路由规则
     ],
    ],
    
  3. 设置请求的 baseUrl 为空 ,不设为空的话会出现无法确定请求的路径信息的错误

    'request' => [
     // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
     'cookieValidationKey' => '8888888888888888888',
     'baseUrl'=>''
    ],
    
  4. 设置静态资源url 以及所有自定义的AssetBundle 类 中的baseUrl对应到实际路径 , 这样就可以定位正确的静态文件目录
    'assetManager' => [
     'baseUrl'=>'/yii2/web/assets/'
    ]
    

至此就可以使用 host/site/index 的方式访问 yii2 中的内容
以上法是我按文档设置的,不知道是否会引起其他问题出现

最佳答案

  • 回答于 2019-03-06 15:37 举报
    * <VirtualHost *:80>
    *     DocumentRoot "F:\yii\backend\web"
    *     ServerName 域名
    *     ServerAlias 
    *   <Directory "F:\yii\backend\web">
    *       Options FollowSymLinks ExecCGI
    *       AllowOverride All
    *       Order allow,deny
    *       Allow from all
    *      Require all granted
    *   </Directory>
    * </VirtualHost>
    
您需要登录后才可以回答。登录 | 立即注册
longxiang
主管

longxiang

注册时间:2017-04-06
最后登录:2021-06-17
在线时长:14小时27分
  • 粉丝1
  • 金钱440
  • 威望10
  • 积分680

热门问题