3

如何将这些 URL 转换为 SEO 友好的 URL 我在 yii 中尝试了 Url manager 但没有得到正确的结果是否有任何关于 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=

我尝试在 url manager 中进行以下设置

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

与网址一起使用http://localhost/nbnd/search/city/city/Delhi

我希望将此网址减少到http://localhost/nbnd/search/city/Delhi

我在我看来生成的链接是<?php echo CHtml::link(CHtml::encode($data->city), array('/search/city', 'city'=>$data->city)); ?>

这会生成链接为http://localhost/nbnd/search/city?city=Delhi 我如何将该链接转换为喜欢http://localhost/nbnd/search/city/Delhi

4

2 回答 2

8

规则应该是(删除额外的城市,即 GET 参数名称):

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

所以规则应该能够匹配参数名称,如果你有 foo/Delhi,你会使用<foo:\w+>.

并删除?使用appendParams,CUrlManager(在您的urlManager配置中):

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

什么时候appendParams

为真,GET 参数将附加到路径信息并使用斜杠彼此分隔。


更新:如果您有多个参数传递给操作,即:

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

/*在规则末尾使用 a :

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

要获取表单的网址:

http://localhost/nbnd/search/manualsearch/Delhi/tosearch/restaurants    
于 2012-12-14T16:08:31.197 回答
2

在 Yii 中,我们可以动态创建 url 例如。

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

我们将获得以下 URL:

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

要更改 URL 格式,我们应该配置 urlManager 应用程序组件,以便createUrl可以自动切换到新格式,并且应用程序可以正确理解新的 URL:

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

我们会得到这个

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

您可以在 yii http://www.yiiframework.com/doc/guide/1.1/en/topics.url中参考此链接以获取用户友好的 url

于 2012-12-14T10:54:40.890 回答