$queueConn = $conn_master ?? $conn; $queueId = 0; $targetUrl = ''; $domainId = 0; try { $rawDomain = $_SERVER['HTTP_HOST'] ?? ''; $currentDomain = preg_replace('/^www\./i', '', $rawDomain); $currentDomain = explode(':', $currentDomain)[0]; mysqli_begin_transaction($queueConn); $stmt = mysqli_prepare($queueConn, " SELECT q.id, q.url, d.id AS domain_id FROM link_queue q INNER JOIN users u ON q.user = u.id INNER JOIN domains d ON d.domain_name = ? AND d.status = '1' WHERE q.status = 'pending' AND ( u.allowed_domains = 'all' OR FIND_IN_SET(d.id, u.allowed_domains) > 0 ) ORDER BY q.id ASC LIMIT 1 FOR UPDATE SKIP LOCKED "); if (!$stmt) { throw new Exception(mysqli_error($queueConn)); } mysqli_stmt_bind_param($stmt, "s", $currentDomain); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if (!$result || !($row = mysqli_fetch_assoc($result))) { mysqli_stmt_close($stmt); mysqli_commit($queueConn); http_response_code(200); echo ""; exit; } $queueId = (int)$row['id']; $targetUrl = trim((string)$row['url']); $domainId = (int)$row['domain_id']; mysqli_stmt_close($stmt); // ------------------------------------------------------ // Claim the job // ------------------------------------------------------ $claim = mysqli_prepare( $queueConn, "UPDATE link_queue SET status='processing' WHERE id=?" ); if (!$claim) { throw new Exception(mysqli_error($queueConn)); } mysqli_stmt_bind_param($claim, "i", $queueId); mysqli_stmt_execute($claim); mysqli_stmt_close($claim); // Release row lock immediately mysqli_commit($queueConn); // ------------------------------------------------------ // Finish processing // ------------------------------------------------------ mysqli_begin_transaction($queueConn); $done = mysqli_prepare( $queueConn, "UPDATE link_queue SET status='done' WHERE id=?" ); if (!$done) { throw new Exception(mysqli_error($queueConn)); } mysqli_stmt_bind_param($done, "i", $queueId); mysqli_stmt_execute($done); mysqli_stmt_close($done); if ($domainId > 0) { $updateDomain = mysqli_prepare( $queueConn, "UPDATE domains SET total_redirected = total_redirected + 1 WHERE id=?" ); if (!$updateDomain) { throw new Exception(mysqli_error($queueConn)); } mysqli_stmt_bind_param($updateDomain, "i", $domainId); mysqli_stmt_execute($updateDomain); mysqli_stmt_close($updateDomain); } mysqli_commit($queueConn); header('X-Robots-Tag: noindex, nofollow'); header('Cache-Control: no-cache, no-store, must-revalidate'); header('Pragma: no-cache'); header('Expires: 0'); header('Location: ' . $targetUrl, true, 301); exit; } catch (Throwable $e) { @mysqli_rollback($queueConn); if ($queueId > 0) { $reset = mysqli_prepare( $queueConn, "UPDATE link_queue SET status='pending' WHERE id=? AND status='processing'" ); if ($reset) { mysqli_stmt_bind_param($reset, "i", $queueId); mysqli_stmt_execute($reset); mysqli_stmt_close($reset); } } error_log("Redirect Route Process Error: " . $e->getMessage()); http_response_code(200); echo ""; exit; }