隐藏Zend Framework中的部分URL

时间:2016-05-24 10:35:02

标签: php zend-framework query-string

我在想是否有办法在PHP / Zend Framework 2中隐藏部分网址。这样的事情:

sitename.com/something/?inviter=1234&id=1

但我想以某种方式隐藏& id = 1的部分,以便当用户复制并输入网址时,它将如下所示:

sitename.com/something/?inviter=1234

另一方面,我可以这样做:

$id = $_GET["id"])

这可能吗,如果可以,怎么做?也许有什么东西接近我想要实现的目标?

2 个答案:

答案 0 :(得分:0)

您只能使用Cookie或会话技术隐藏它。但它只能在一个会话期间为一个用户工作。

答案 1 :(得分:0)

您可以使用parse_urlhttp_build_urlparse_strhttp_build_str来解析和重建网址。

例如:

/**
 * Transform a url using a whitelist of query-string keys
 */
function transformUrlKeepQueryKeys($url, array $whitelist)
{
    // Break the given url into parts
    $parts = parse_url($url);

    // Break the parts into key-value pairs
    $query = $parts['query'];
    parse_str($query, $queryParts);

    // Unset all unwanted keys
    foreach (array_keys($queryParts) as $k) {
        if (!in_array($k, $whitelist)) {
            unset($queryParts[$k]);
        }
    }

    // rebuild the url
    $parts['query'] = http_build_query($queryParts);

    // return
    return http_build_url('', $parts);
}

调用应该是:

$url = 'http://sitename.com/something/?inviter=1234&id=1';
$whitelist = [
    'inviter'
];
$expectedUrl = 'http://sitename.com/something/?inviter=1234';
$actualUrl = transformUrlKeepQueryKeys($url, $whitelist);
assert($expectedUrl == $actualUrl);

或者,您可以使用要删除的黑名单来实现类似的功能。

唯一的问题是函数http_build_url不包含在核心PHP中,而是PECL HTTP扩展的一部分。如果您无法在您的环境中安装该扩展,那么您可以使用该函数的纯PHP实现,例如here