2014-10-20 117 views
2

我正在尝试学习yii 2.0,目前我正在使用yii 2.0的basic版本。第一步是配置网址。所以,按照指导,我启用mod_rewrite,使用phpinfo()选中它,然后添加下面的componentsconfig/web.php行:urlManager不工作在Yii 2.0

‘urlManager’ => [ 
    'class' => 'yii\web\UrlManager', 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
], 

现在我期待http://localhost/basic/web/index.php?r=site/test作为http://localhost/basic/web/index.php/site/test

工作,但它带我到index方法SiteController。其实它采取所有的网址index方法。 index.php之后的部分不重要。即使是错误的controllerId/actionId的作品。可能是什么问题呢?

这里是我的config/web.php

<?php 

$params = require(__DIR__ . '/params.php'); 

$config = [ 
    'id' => 'basic', 
    'basePath' => dirname(__DIR__), 
    'bootstrap' => ['log'], 
    'components' => [ 
     'request' => [ 
      // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 
      'cookieValidationKey' => 'tSjCFs0He7lBeZN34fLzFij2xUUE4NwK', 
     ], 
     'cache' => [ 
      'class' => 'yii\caching\FileCache', 
     ], 
     'user' => [ 
      'identityClass' => 'app\models\User', 
      'enableAutoLogin' => true, 
     ], 
     'errorHandler' => [ 
      'errorAction' => 'site/error', 
     ], 
     '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' => require(__DIR__ . '/db.php'), 
     ‘urlManager’ => [ 
      'class' => 'yii\web\UrlManager', 
      'enablePrettyUrl' => true, 
      'showScriptName' => false, 
     ], 
    ], 
    'params' => $params, 
]; 

if (YII_ENV_DEV) { 
    // 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; 

回答

7

您需要配置apache为好。作为Yii's official guide说:

推荐的Apache配置

# Set document root to be "basic/web" 
DocumentRoot "path/to/basic/web" 

<Directory "path/to/basic/web"> 
# use mod_rewrite for pretty URL support 
RewriteEngine on 
# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 

# ...other settings... 

你也可以创建一个.htaccess文件与下面的内容你的web目录:

RewriteEngine on 

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

另手,你必须改变'如'如下:

'urlManager' => [ //you wrote `urlManager` which must change to 'urlManager' 
     'class' => 'yii\web\UrlManager', 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
    ], 

UPDATE

建议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 mysite.local; 
root  /path/to/basic/web; 
index  index.php; 

access_log /path/to/basic/log/access.log main; 
error_log /path/to/basic/log/error.log; 

location/{ 
    # Redirect everything that isn't a real file to index.php 
    try_files $uri $uri/ /index.php?$args; 
} 

# uncomment to avoid processing of calls to non-existing static files by Yii 
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { 
# try_files $uri =404; 
#} 
#error_page 404 /404.html; 

location ~ \.php$ { 
    include fastcgi.conf; 
    fastcgi_pass 127.0.0.1:9000; 
    #fastcgi_pass unix:/var/run/php5-fpm.sock; 
    try_files $uri =404; 
} 

location ~ /\.(ht|svn|git) { 
    deny all; 
} 
} 

Recommended Nginx Configuration

+0

接着说:.htaccess'到'WWW /基本/'。还是一样的结果。 – Kanav 2014-10-20 12:05:40

+0

@Kanav用''urlManager''替换''urlManager'' – 2014-10-20 12:11:25

+0

@Kanav Ooops,并将'.htaccess'文件放入'/ www/basic/web'目录。不在'www/basic /' – 2014-10-20 12:17:25