重定向取决于URI段

时间:2012-05-01 01:12:17

标签: php codeigniter

我正在使用Codeigniter并希望拥有SEO友好的网址。将有两种类型的URI细分,http://www.domain.com/view/193847http://www.domain.com/view/193847-canon-5d-mark-iii

如果使用第一个网址,则会调用函数view_mini并传递产品ID 193847。如果使用第二个,则会调用函数view_full并传递相同的产品ID 193847

问题:如何区分2个网址?或者这是解决问题的劣等方法?

PHP 如何构建if条件?

function view($pid) {
    if($this->uri->segment(2) == something) {
        $this->view_mini($pid);
    } else {
        $this->view_full($pid);
        }
}

function view_mini($pid) {
   // ...
}

function view_full($pid) {
   // ...
}

修改

我正在使用网址路由将http://www.domain.com/controllername/view/1234路由到http://www.domain.com/view/1234

4 个答案:

答案 0 :(得分:0)

编辑:未经测试

$route["view/(\d+)"] = "class/view_mini/$1";
$route["view/(\d+)-([\w'-]*)?/g"] = "class/view_full/$1/$2";

答案 1 :(得分:0)

不同的网址是否有明确的结构?

http://www.domain.com/view/[numbers]-[text]

如果是这样,您可以在数字和短划线之间测试该短划线的URL吗?

答案 2 :(得分:0)

你可以使用正则表达式检查段是否有除数字以外的任何内容,然后你可以执行你想要的视图,例如

$pattern = '\d[0-9][^a-zA-Z]';
$url = $this->uri->segment(2);
if(preg_match($pattern,$url))
{
//this will match only the numbers

$this->view_mini($pid);
    } else {
        $this->view_full($pid);
    }

我希望这会有所帮助..

答案 3 :(得分:0)

使用

$result = explode('-', $this->uri->segment(1));

If(isset($result[1]))
{
    // show full view
} else {

    // show mini view

}

$ pid永远是$ result [0]