• Модуль: security
  • Путь к файлу: ~/bitrix/modules/security/classes/general/redirect.php
  • Класс: CSecurityRedirect
  • Вызов: CSecurityRedirect::ReplaceHREF
static function ReplaceHREF($matches)
{
	static $arUrls = false;
	static $sid = false;
	static $strDomains = false;

	if(!$arUrls)
	{
		$arUrls = self::GetUrls();
		$sid = static::GetSeed();
		$arDomains = self::GetDomains();
		foreach($arDomains as $i => $domain)
			$arDomains[$i] = preg_quote($domain, "/");
		$strDomains = "/.*(".implode("|", $arDomains).")$/";
	}

	foreach($arUrls as $arUrl)
	{
		if(preg_match("/^(http(?:s){0,1}\:\/\/(?:[a-zA-Z0-9\.-])+){0,1}".preg_quote($arUrl["URL"], "/")."?.*?".preg_quote($arUrl["PARAMETER_NAME"], "/")."=(http|https|ftp)(:|%3A|%3A)(\/\/|%2F%2F|%2F%2F)([^&]+)/im", $matches[3], $match))
		{
			if($match[1] == '' || preg_match($strDomains, $match[1]))
			{
				$goto = $match[2].$match[3].$match[4].$match[5];
				$goto = str_replace(
					array("%", "%3A", "%2F"),
					array("%", ":", "/"),
				$goto);

				return $matches[1].$matches[2].$matches[3]."&af=".static::Sign($sid, urldecode($goto)).$matches[4];
			}
		}
	}
	return $matches[0];
}