4

我有这样的网址:

www.studyenglish/index.php?r=site/lesson&act=read&id=1

我希望更改为:

www.studyenglish/site/lesson/read

我在 url manager config/main.php 中添加了这个脚本

'urlManager'=>array(
       ....
       'showScriptName'=>false,
        ....
    ),

并将此脚本添加到 .htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# 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

但它只适用于这样的网址:

www.studyenglish/index.php?r=site/lesson

成为:

www.studyenglish/site/lesson

那么,如何更改此网址

www.studyenglish/index.php?r=site/lesson&act=read&id=1

成为

www.studyenglish/site/lesson/read

希望有人可以提供帮助。谢谢 ...

4

3 回答 3

1

UrlManager规则,您可以定义自己的规则。你的 UrlManager 可能看起来像这样。

'urlManager' => array(
'urlFormat' => 'path',
    'rules' => array(
        'gii' => 'gii/index',
        'gii/<controller:\w+>/<action:[\w-]+>' => 'gii/<controller>/<action>',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        'site/lesson/<act:\w+>/<id:\d+>' => 'site/lesson'
        //

这将调用SiteController中的actionLesson,它应该获得两个参数。

你的方法应该看起来像这样。

public function actionLesson($act,$id){
    //
}
于 2015-10-22T07:36:40.777 回答
1

将您的 .htaccess 更改为:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# 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?r=$1 [L]

并在 URL 管理器中添加适当的规则。

于 2015-11-03T06:43:03.960 回答
0

改变你的urlManager喜欢:

'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName' => false,
            'rules'=>array(),
        ),

和你的.htaccess喜欢:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# 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 [L]
于 2015-11-03T06:20:17.547 回答