mod_rewrite可以用任何名称转换任意数量的参数吗?

时间:2009-05-19 18:37:41

标签: regex apache mod-rewrite

我在mod_rewrite总计n00b,我想做的事情听起来很简单:

而不是domain.com/script.php?a=1&b=2&c=3我希望:

domain.com/script|a:1;b:2;c:3

问题在于我的脚本以各种组合方式获取大量参数,并且顺序并不重要,因此对表达式中的每个参数进行编码并期望某个顺序是不可行的。因此,可以设置一个规则,只需将所有参数传递给脚本,无论顺序或参数多少?所以如果有人输入

domain.com/script |a:1; b:2; j:7它将传递所有这些参数和值,与domain.com/script |b:2; a:1相同; ?

谢谢!

1 个答案:

答案 0 :(得分:3)

我会使用PHP来解析请求的URL路径:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$params = array();
foreach (explode(',', substr($_SERVER['REQUEST_URI_PATH'], 6)) as $param) {
    if (preg_match('/^([^:]+):?(.*)$/', $param, $match)) {
        $param[rawurldecode($match[1])] = rawurldecode($match[2]);
    }
}
var_dump($params);

mod_rewrite规则将这些请求重写为/script.php文件:

RewriteRule ^script\|.+ script.php [L]