yii-urlManager:如何将路由重定向到模式

yii-urlManager:如何将路由重定向到模式,yii,Yii,我有urlManager规则: ... '/<slug:(nasha-glavnaya-zagolovok)>' => 'page/page/show', '/pages/<slug>' => 'page/page/show', ... 它打开了我需要的页面 但如果我试图打开页面 /pages/nasha-glavnaya-zagolovok 它还打开了我需要的页面 但页面内容是相同的 如果urlManager中有任何规则,我如何从路由重定向到模式(带30

我有urlManager规则:

...
'/<slug:(nasha-glavnaya-zagolovok)>' => 'page/page/show',
'/pages/<slug>' => 'page/page/show',
...
它打开了我需要的页面 但如果我试图打开页面

/pages/nasha-glavnaya-zagolovok
它还打开了我需要的页面

但页面内容是相同的


如果urlManager中有任何规则,我如何从路由重定向到模式(带301头)?

我不能给你完整的答案,但你可以这样做

您可以使用一个规则,将请求发送到一个操作,该操作只需使用CController::redirect()重定向

替换这个

'/<slug:(nasha-glavnaya-zagolovok)>' => 'page/page/show',
'/pages/<slug>' => 'page/page/show',
“/”=>“页面/页面/显示”,
“/pages/”=>“page/page/show”,
用这个

'/<slug:(nasha-glavnaya-zagolovok)>' => 'page/page/show',
'/pages/<slug>' => 'site/redirect',
“/”=>“页面/页面/显示”,
“/pages/”=>“站点/重定向”,
并在“站点/重定向”操作中将用户重定向到/$slug


更新:您可以通过编写一个新的url规则来扩展CBaseUrlRule,但不确定是否愿意花时间这样做,如果这是您想要执行的唯一重定向,尽管

由于您使用的是相同的控制器操作,所以内容是相同的,请不要感到惊讶。。。你到底想做什么?我知道他们是一样的。但是,选择最后一条规则,不去其他人那里怎么样?我怎样才能获得信息,而不是存在一些短url?通过这种操作,我将获得一些文章的简短url,不是所有文章,但大多数文章这是一个新的、不相关的问题。在重定向用户的操作中,您可以执行任何操作都可以执行的操作,检查文章是否存在,如果没有引发异常,或者将用户重定向到文章页面。这将增加一些开销(除非是一个非常大规模的项目,否则你可能不会注意到),我认为,采取行动不是一个好主意。因为,就行动而言,我知道,但是关于urlManager,这是一个非常好的问题。如果有一些行动,比如.htaccess有最后一条规则那样的“…[L]”,这将是一个很好的问题,不要去其他人那里!
'/<slug:(nasha-glavnaya-zagolovok)>' => 'page/page/show',
'/pages/<slug>' => 'site/redirect',