• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage.php
  • Класс: CCloudStorage
  • Вызов: CCloudStorage::OnBeforeProlog
static function OnBeforeProlog()
{
	if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI)
	{
		$upload_dir = "/".trim(COption::GetOptionString("main", "upload_dir", "upload"), "/")."/";
		$request_uri = BitrixMainTextEncoding::convertEncoding(rawurldecode($_SERVER["REQUEST_URI"]), "UTF-8", LANG_CHARSET);

		foreach (CCloudStorageBucket::GetAllBuckets() as $arBucket)
		{
			if ($arBucket["ACTIVE"] == "Y")
			{
				$obBucket = new CCloudStorageBucket($arBucket["ID"]);
				if ($obBucket->Init())
				{
					$bucketUrl = $obBucket->GetFileSRC('/');
					$bucketPrefix = rtrim(parse_url($bucketUrl, PHP_URL_PATH), '/');
					$prefixMatch = $bucketPrefix ? "(?:$bucketPrefix|)" : "";
					$match = array();
					if (
						COption::GetOptionString("clouds", "delayed_resize") === "Y"
						&& preg_match("#^$prefixMatch(/resize_cache/.*$)#", $request_uri, $match)
					)
					{
						session_write_close();
						$to_file = $obBucket->GetFileSRC($match[1], false);
						if (CCloudStorage::ResizeImageFileCheck($obBucket, $to_file))
						{
							$cache_time = 3600 * 24 * 30; // 30 days
							header("Cache-Control: max-age=".$cache_time);
							header("Expires: ".gmdate("D, d M Y H:i:s", time() + $cache_time)." GMT");
							header_remove("Pragma");
							LocalRedirect(BitrixMainWebUri::urnEncode($to_file, "UTF-8"), true, "301 Moved Permanently");
						}
					}
					elseif (
						!preg_match("/[?&]/", $request_uri)
						&& $obBucket->FileExists($request_uri)
					)
					{
						if (COption::GetOptionString("clouds", "log_404_errors") === "Y")
							CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
						LocalRedirect($obBucket->GetFileSRC($request_uri), true);
					}
					elseif (mb_strpos($request_uri, $upload_dir) === 0)
					{
						$check_url = mb_substr($request_uri, mb_strlen($upload_dir) - 1);
						if ($obBucket->FileExists($check_url))
						{
							if (COption::GetOptionString("clouds", "log_404_errors") === "Y")
								CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
							LocalRedirect($obBucket->GetFileSRC($check_url), true);
						}
					}
				}
			}
		}
	}
}