Yii自定义网址路由

时间:2013-05-02 14:44:41

标签: .htaccess url yii seo routes

我想在Yii框架中创建友好的URL。

一个例子:

mysitename.com/country/city/travelling-type

mysitename.com/country/city/travelling-type/price
mysitename.com/city/price

问题是它会混淆参数。 所以我尝试用下面的代码来解决它,但它还不够好:

'urlManager' => array(
        'urlFormat' => 'path',
        'appendParams' => true,
        'showScriptName' => false,
        'useStrictParsing' => FALSE,
        'rules' => array(
            '<country:\w+>/<city:\w+>/<travelling_type:\w+>/<accommodation:\w+>/<caftering:\w+>/<price_from:\d+/<price_to:\d+>' => 'Travels/list'
        ),
    ),

1 个答案:

答案 0 :(得分:2)

这并不容易,因为Yii不知道这两个网址之间的区别:

mysitename.com/{city}/{price}
mysitename.com/{city}/{accommodation}

你可以做的是改变这个系统的路线:

'<param1:\w+>/<param2:\w+>/<param3:\w+>/<param4:\w+>/<param5:\w+>/<param6:\d+/<param7:\d+>' => 'Travels/list'

您的操作必须确定哪个查询参数代表搜索查询的哪个参数。在您系统的某些情况下,这应该很容易。例如,国家数量有限,旅行类型可能有限等。

如果是

mysitename.com/{city}/{accommodation}

您的系统会根据国家,城市,旅行类型,住宿类型和餐饮类型列表查询“param1”(= city),以确定param1确实是一个城市。然后它将继续使用param2来确定它定义了住宿。

价格更容易识别,因为它们是不同的数据类型(如果旅行搜索引擎整数可能足够好),因此您只需检查价格是否为整数(或类似),即可轻松识别价格。 为了区分price_from和price_to,我建议你假设如果只有一个价格,那就是price_from;如果有两个价格,第一个是price_from,第二个是price_to。 如果您只想设置price_to,请将price_from设置为0。

我希望涵盖你想做的事情。设置起来可能相当复杂,但这是你必须为这样的URL路由支付的价格。 :)