1

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

如果使用第一个 URL,view_mini则调用函数并传递产品 id 193847。如果使用第二个,函数view_full将被调用并传递相同的产品 id 193847

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

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) {
   // ...
}

编辑

我正在使用 URL 路由路由http://www.domain.com/controllername/view/1234http://www.domain.com/view/1234

4

4 回答 4

0

编辑:未经测试

$route["view/(\d+)"] = "class/view_mini/$1";
$route["view/(\d+)-([\w'-]*)?/g"] = "class/view_full/$1/$2";
于 2012-05-01T01:19:02.657 回答
0

不同的 URL 是否有明确的结构?

IE。

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

如果是这样,您可以测试数字和破折号之间的破折号的 URL?

于 2012-05-01T01:25:46.673 回答
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);
    }

我希望这个能帮上忙 ..

于 2012-05-01T09:25:26.237 回答
0

采用

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

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

    // show mini view

}

$pid 永远是 $result[0]

于 2012-05-01T22:29:34.027 回答