【问题标题】: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']);