Yii:删除不必要的URL参数

时间:2014-02-04 17:25:10

标签: php yii

我有一个问题: 我按照以下方式手册,用SEO友好的URL编写了我的应用程序:

http://example.com/page/page-slug

使用以下URLManager规则:

'page/<slug:.*?>/<page:.*?>'=>'page/view',
'page/<slug:.*?>/'=>'page/view',

一切正常,但是当链接被共享时(我实际上并不知道在哪里),一些附加参数以奇特的方式添加:

http://example.com/page/page-slug&安培;语言环境= EN_US&安培;流动=真安培; numposts = 5

当发生这种情况时,页面会抛出错误

Invalid argument supplied for foreach()

跟踪到我的控制器内的私有函数,该函数与此无关。

所以我的问题是:

如何清理beforeAction中的请求网址?有什么办法吗?

提前致谢: - )

1 个答案:

答案 0 :(得分:1)

我要做的第一件事就是改进规则,使他们只接受预期值。目前你几乎要放任何东西。有点像:

'page/<slug:\w+>/<page:[a-z\-]+>'=>'page/view',
'page/<slug:\w+>/'=>'page/view',

这样做可以确保......

http://example.com/page/page-slug&locale=en_us&mobile=true&numposts=5

...因为网址与您的规则不符而导致404。

然而,无论如何,该URL都是格式错误的,因为第一个&符应该是问号。因此,如果您期望错误的网址,您可以留意它们。这是一个非常粗略的正则表达式,但你明白了:

'page/<slug:\w+>/<page:[a-z\-]+>&<rubbish:.*>'=>'page/viewWithBadUrls',

在你的actionViewWithBadUrls()控制器方法中你会得到:

print_r($_GET); // Array ( [slug] => page [page] => page-slug [rubbish] => locale=en_us&mobile=true&numposts=5 ) 

您可以使用,或将URL和301清理到正确的位置