【问题标题】:Codeigniter Prevent Passing Parameter to Function to Avoid Non-Existent URI SegmentCodeigniter 防止将参数传递给函数以避免不存在的 URI 段
【发布时间】:2012-10-18 21:29:22
【问题描述】:

所以我有一个页面:

http://www.mysite.com/controller/function

该函数在控制器中定义为:

function ()
{
//some stuff here
}

但是可以解析 URL: http://www.mysite.com/controller/function/blablabla

即"blablabla" 可以传递给函数并形成一个额外的 URI 段,但仍会显示相同的页面。我对许多控制器/函数有同样的问题 - 如何防止参数被传递给函数(或显示为 URI 段)?

我一直在使用 Codeigniter 和 PHP 大约 6 个月的时间,如果答案是显而易见的,请原谅我,但我的搜索在这方面没有取得成果。

我的目标是优化 SEO - 不确定将具有额外 URI 段的页面重定向到正确的页面还是 404 页面更好。

【问题讨论】:

标签: php codeigniter function parameters uri


【解决方案1】:

如果不更改 CI 处理 URI 解析的方式,就无法防止这种情况发生。

你可以像这样强制重定向:

function my_happy_function($redirect=null) {
   if($redirect) {
   redirect('/controller/my_happy_function/');
   }
}

这会以页面重定向为代价去除 URI 中给出的任何变量。

【讨论】:

  • 谢谢。就整个网站的代码膨胀而言可能很昂贵,所以从 SEO 的角度来看可能不值得担心!
  • 不客气!是的,通常没有必要,使用参数会很有帮助。既然我回答了这个问题,您介意将其标记为已接受吗?谢谢!
【解决方案2】:

听起来您想要一个通用的页面捕获所有内容。你可以使用路由来做到这一点。

例如:

$route['my_happy_function(/:any)*'] = "my_happy_function";

然后在您的 my_happy_function 索引方法中检查那里的 URI 段...

public function index()
{
    $something = $this->uri->segment(1);
    $something_else = $this->uri->segment(2);
    // etc

}

这样所有对 my_happy_function 的调用都会被推送到索引方法...

等等,我是否正确理解了您的问题?如果我错过了重点,请告诉我,我可以更新。

【讨论】:

  • 谢谢,这更多是为了防止人们创建不寻常的反向链接,因此重定向到 404 页面可能会更好。例如有人可以做 www.mysite/controller/function/lotsofnaughtywords 并且 URL 会解析
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多