【问题标题】:How to rewrite url to multiple query parameters?如何将url重写为多个查询参数?
【发布时间】:2011-02-12 19:25:54
【问题描述】:

如何重写 url,如:

http://domain.com/class/method/parameter1/parameter2/.../parameterN

http://domain.com/index.php?c=class&m=method&p1=parameter1&...&pN=parameterN

主要思想是创造使用无限数量的查询参数的可能性。

谢谢。

【问题讨论】:

    标签: apache url parameters rewrite


    【解决方案1】:

    可以像这样使用Apache’s mod_rewrite module 做到这一点:

    RewriteRule ^/([^/]+/[^/]+)/([^/]+)(/.+)?$ /$1$3?p[]=$2 [N,QSA]
    RewriteRule ^/([^/]+)/([^/]+)$ /index.php?c=$1&m=$2 [L,QSA]
    

    但使用 PHP 肯定会更容易做到这一点:

    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
    if (count($segments) >= 2) {
        $_GET['class'] = array_shift($segments);
        $_GET['m'] = array_shift($segments);
        $_GET['p'] = $segments;
    } else {
        // error
    }
    

    那么你只需要一个规则来重写请求:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^index\.php$ index.php [L]
    

    【讨论】:

    • 加上:$segments = explode('/', $segments);以及之后的剩余查询参数的一些迭代: $_GET['p'] = array_shift($segments);你提出的简单方法就像一个魅力。谢谢。
    • @vbklv: 是的,忘了explode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2015-04-27
    • 2017-01-18
    相关资源
    最近更新 更多