using url manager in yii to change url to seo frie

2020-02-26 02:42发布

问题:

How can I convert these URL to SEO friendly URL I tried Url manager in yii but didn't get the proper result is there any good tutorial regarding url manager

http://localhost/nbnd/search/city?city=new+york
http://localhost/nbnd/search/manualsearch?tosearch=Hotel+%26+Restaurants+&city=New+york&yt0=Search&searchtype=

I tried to the following setting in url manager

'<controller:\w+>/<action:\w+>/<city:\d>'=>'<controller>/<action>',

which works with url http://localhost/nbnd/search/city/city/Delhi

I wish to reduce this url to http://localhost/nbnd/search/city/Delhi

and the link I generating in my view is <?php echo CHtml::link(CHtml::encode($data->city), array('/search/city', 'city'=>$data->city)); ?>

This generates link as http://localhost/nbnd/search/city?city=Delhi How can I convert that link to like http://localhost/nbnd/search/city/Delhi

回答1:

The rule should be (to remove the extra city, which is the GET parameter name):

'<controller:\w+>/<action:\w+>/<city:\w+>'=>'<controller>/<action>', // not city:\d, since Delhi is a string, not digit

So the rule should be able to match the parameter name, incase you had foo/Delhi, you'd use <foo:\w+>.

And to remove the ? use appendParams of CUrlManager, (in your urlManager config):

'urlManager'=>array(
    'urlFormat'=>'path',
    'appendParams'=>true,
    // ... more properties ...
    'rules'=>array(
        '<controller:\w+>/<action:\w+>/<city:\w+>'=>'<controller>/<action>',
        // ... more rules ...
    )
)

When appendParams

is true, GET parameters will be appended to the path info and separate from each other using slashes.


Update: Incase you have more than one parameter being passed to the action i.e:

http://localhost/nbnd/search/manualsearch/Delhi?tosearch=restaurants

Use a /* at the end of the rule:

'<controller:\w+>/<action:\w+>/<city:\w+>/*'=>'<controller>/<action>'

To get urls of form:

http://localhost/nbnd/search/manualsearch/Delhi/tosearch/restaurants    


回答2:

In Yii we can create urls dynamically For eg.

$url=$this->createUrl($route,$params);
$route='post/read'.
$params=array('id'=>100)

we would obtain the following URL:

/index.php?r=post/read&id=100

To change the URL format, we should configure the urlManager application component so that createUrl can automatically switch to the new format and the application can properly understand the new URLs:

array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'path',
        ),
    ),
);

WE will obtain this

/index.php/post/read/id/100

You can refer this link for user friendly urls in yii http://www.yiiframework.com/doc/guide/1.1/en/topics.url



标签: yii seo