如何将url重写为多个查询参数?

时间:2010-04-27 10:42:32

标签: apache url parameters rewrite

如何重写网址:

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

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

可以使用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]