【问题标题】:Redirect depending on URI Segment根据 URI 段重定向
【发布时间】:2012-05-01 01:12:17
【问题描述】:

我正在使用 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/1234 路由到 http://www.domain.com/view/1234

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

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

    $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);
        }
    

    我希望这会有所帮助..

    【讨论】:

    • 这个模式也应该有助于 " /(\d+)-([a-zA-Z]*)?/g "
    • @Philip 完全正确.. 你的模式将搜索完整的 url 我的只会搜索数字.. 两者都有效.. 谢谢
    • 我想我更愿意检查 uri 段中是否存在任何字符或连字符,而不是搜索数值,因为数值应该出现在两个 url 查询中。
    • 我的模式只会搜索第一个数字,这是 URI 的第一部分,你可以在这里测试它gskinner.com/RegExr .. 但它是个人的帮助,为你做最好的事情..
    • 是的,可以很好地匹配第一组数字,但条件应该基于 uri 段的下一部分。看看OP发布的两个网址。此模式检查段中是否存在连字符和字符。干杯。 regexr.com?30qjq
    【解决方案2】:

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

    即。

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

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

    【讨论】:

    • 是的,这就是我想要的结构。听起来是个好主意
    【解决方案3】:

    编辑:未经测试

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

    【讨论】:

    • 是否可以在不分成适当段的情况下进行 url 路由?
    【解决方案4】:

    使用

    $result = explode('-', $this->uri->segment(1));
    
    If(isset($result[1]))
    {
        // show full view
    } else {
    
        // show mini view
    
    }
    

    $pid 永远是 $result[0]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2016-03-10
      • 2020-12-08
      相关资源
      最近更新 更多