【问题标题】:Yii: Removing unnecessary URL parametersYii:删除不必要的 URL 参数
【发布时间】:2014-02-04 17:25:09
【问题描述】:

我有一个问题: 根据手册,我使用 SEO 友好的 URL 对我的应用程序进行了编程,方法如下:

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

使用以下 URLManager 规则:

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

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

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

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

Invalid argument supplied for foreach()

追踪到我的控制器内部的一个与此无关的私有函数。

所以我的问题是:

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

提前致谢:-)

【问题讨论】:

    标签: php yii


    【解决方案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
    

    ...由于 URL 与您的规则不匹配而导致 404。

    无论如何,该 URL 格式不正确,因为第一个 & 号应该是一个问号。因此,如果您期待错误的 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 清理到正确的位置

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多