【问题标题】:Rewrite dynamic substring in URL重写 URL 中的动态子字符串
【发布时间】:2014-05-15 02:50:00
【问题描述】:

正如标题所示,我的目标是在.htaccess 中添加一个重写语句来替换 URL 中间的动态子字符串。此外,我需要所有出现的“|”改为“+”。

例如,我想使用这个网址

www.domain.com/?t=p&c=some+string&skus=string1|string2|string3

并将其重定向到:

www.domain.com/?q=string1+string2+string3

基本上,要替换的子字符串从“t=”开始,到“skus”结束。

这可能吗?用 PHP 更容易做到吗?

【问题讨论】:

    标签: php regex .htaccess mod-rewrite


    【解决方案1】:

    你可以使用parse_url函数

    这样就可以了

    $url = "www.domain.com/?t=p&c=some+string&skus=string1|string2|string3";
    
    echo "<pre>";
    print_r($decoded = parse_url($url));
    print_r($parsed = queryToArray($decoded['query']));
    $parms = explode("|", $parsed['skus']); 
    print_r($parms);
    echo "</pre>";
    
    
    function queryToArray($qry)
    {
        $result = array();
        //string must contain at least one = and cannot be in first position
        if(strpos($qry,'=')) {
    
         if(strpos($qry,'?')!==false) {
           $q = parse_url($qry);
           $qry = $q['query'];
          }
        }else {
                return false;
        }
    
        foreach (explode('&', $qry) as $couple) {
                list ($key, $val) = explode('=', $couple);
                $result[$key] = $val;
        }
        return empty($result) ? false : $result;
    }
    
    the result should look like this
    
        Array
    (
        [path] => www.domain.com/
        [query] => t=p&c=some+string&skus=string1|string2|string3
    )
    Array
    (
        [t] => p
        [c] => some+string
        [skus] => string1|string2|string3
    )
    Array
    (
        [0] => string1
        [1] => string2
        [2] => string3
    )
    

    【讨论】:

      【解决方案2】:

      尽可能使用 PHP 内置函数。所以在这种情况下使用 parse_url 和 parse_str。

      $parts = parse_url($url);
      parse_str($parts['query'], $query);
      $params = explode('|', $query['skus']);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 2016-01-31
        相关资源
        最近更新 更多