我在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相同; ?
谢谢!
答案 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]