Учитывая большое количество длинных URL-адресов в Интернете, программа сокращения URL-адресов может помочь вам создавать чистые короткие ссылки, которые идеально подходят для маркетинговых кампаний, социальных сетей или личных проектов. С точки зрения маркетинга сокращатели URL-адресов очень важны по нескольким причинам.

  • Отслеживание кампании: Вам всегда следует добавлять параметры UTM Analytics, чтобы отслеживать места каждого посещения. Однако в этих параметрах часто используется типичный URL-адрес, что делает его длинным и неуправляемым.
  • QR-коды: добавьте длинный URL-адрес в QR-код, и вы получите огромный QR-код. Сокращенные URL-адреса значительно упрощают QR-коды, что может расширить их видимость издалека.

По этой причине у вас может возникнуть соблазн приобрести лицензию на сокращение URL-адресов, но вы будете удивлены, насколько легко их создать. В этом пошаговом руководстве вы узнаете, как создать сокращатель URL-адресов с помощью PHP, MySQL и .htaccess для чистых, сокращенных URL-адресов, например. http://yourdomain.com/abc123.

В этом руководстве мы объясним, как создать сокращатель URL-адресов, используя PHP, MySQL и .htaccessи мы включим критические улучшения безопасности, оптимизация базы данныхи улучшения производительности. Мы рассмотрим, как:

  • Использовать PHP для обработки сокращения и перенаправления URL-адресов.
  • Установите База данных MySQL с оптимизированной конструкцией и функциями безопасности.
  • Осуществлять .htaccess для чистых и удобных сокращенных URL-адресов.
  • Улучшите общесистемную безопасность, предотвратите угадывание URL-адресов и улучшите производительность.

Шаг 1. Настройте безопасную базу данных MySQL

Надежная структура базы данных имеет решающее значение для эффективного хранения и перенаправления URL-адресов. Выполните следующие шаги, чтобы безопасно настроить базу данных MySQL.

  1. Создать базу данных MySQL (если у вас его еще нет) и создайте пользователя с ограниченными привилегиями, чтобы снизить риски безопасности:
CREATE USER 'url_shortener_user'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT INSERT, SELECT, UPDATE ON your_database.urls TO 'url_shortener_user'@'localhost';
  1. Создайте таблицу URL-адресов:
CREATE TABLE urls (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    original_url TEXT NOT NULL,
    short_code VARCHAR(10) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    clicks INT DEFAULT 0,
    last_visited TIMESTAMP NULL,
    expiry_date TIMESTAMP NULL
);
  • идентификатор: уникальный идентификатор для каждого URL-адреса.
  • начальный_url: сохраняет исходный URL-адрес.
  • короткий_код: короткий код.
  • за клики: отслеживает, сколько раз был осуществлен доступ к URL-адресу.
  • последний_посещенный: последний раз, когда был нажат короткий URL-адрес.
  • Дата окончания срока: опционально устанавливает срок действия URL-адреса.
  • Индексы: добавить индекс short_code столбец для оптимизации поиска:
CREATE INDEX idx_short_code ON urls (short_code);

Это ускоряет получение URL-адресов, особенно по мере роста таблицы.

ЧИТАТЬ  Подержанный внедорожник: как сделать идеальный выбор? -J Автомобиль

Шаг 2. Создайте PHP-скрипт с функциями безопасности и производительности.

Создайте shortener.php файл, который:

  1. Генерирует короткие коды.
  2. Безопасно сохраняет URL-адрес в базе данных.
  3. Перенаправляет пользователей, когда они посещают короткий URL-адрес.
  4. Отслеживает клики и обрабатывает URL-адреса с истекшим сроком действия.
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Could not connect to the database: " . $e->getMessage());
}

// Validate the URL before storing it
function validateURL($url) {
    return filter_var($url, FILTER_VALIDATE_URL) && strlen($url) prepare("SELECT COUNT(*) FROM urls WHERE short_code = :code");
        $stmt->execute(['code' => $shortCode]);
    } while ($stmt->fetchColumn() > 0);

    return $shortCode;
}

// Generate a random short code
function generateShortCode($length = 6) {
    return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}

// Shorten a URL and return the short code
function shortenURL($pdo, $url) {
    if (!validateURL($url)) {
        die("Invalid URL provided.");
    }

    // Check if the URL already exists
    $stmt = $pdo->prepare("SELECT short_code FROM urls WHERE original_url = :url LIMIT 1");
    $stmt->execute(['url' => $url]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($result) {
        return $result['short_code'];
    }

    // Generate a unique short code and store the URL
    $shortCode = generateUniqueShortCode($pdo);
    $stmt = $pdo->prepare("INSERT INTO urls (original_url, short_code) VALUES (:url, :code)");
    $stmt->execute(['url' => $url, 'code' => $shortCode]);

    return $shortCode;
}

// Handle URL redirection, clicks, and expiry
if (isset($_GET['code'])) {
    $shortCode = $_GET['code'];

    // Find the original URL
    $stmt = $pdo->prepare("SELECT original_url, clicks, expiry_date FROM urls WHERE short_code = :code LIMIT 1");
    $stmt->execute(['code' => $shortCode]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($result) {
        // Check if the URL has expired
        if ($result['expiry_date'] && strtotime($result['expiry_date']) prepare("UPDATE urls SET clicks = clicks + 1, last_visited = NOW() WHERE short_code = :code");
        $stmt->execute(['code' => $shortCode]);

        // Redirect to the original URL
        header("Location: " . $result['original_url']);
        exit();
    } else {
        die("URL not found.");
    }
}

// Handle URL shortening form submission
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['url'])) {
    $url = $_POST['url'];
    $shortCode = shortenURL($pdo, $url);
    $shortURL = " . $shortCode;
    echo "Shortened URL: $shortURL";
}
?>

Ключевые улучшения безопасности в коде:

  1. Проверка URL: гарантирует, что будут сокращены только действительные URL-адреса.
  2. Ограничение скорости и reCAPTCHA (необязательно): Чтобы предотвратить злоупотребления, внедрите ограничение скорости с помощью таких инструментов, как mod_evasive или используйте Google reCAPTCHA в форме
  3. Применение HTTPS: убедитесь, что HTTPS реализован с использованием .htaccess.

Шаг 3. Используйте .htaccess для создания чистых URL-адресов

Чтобы переписать URL-адрес, чтобы пользователи видели только короткий код (http://yourdomain.com/abc123), создайте .htaccess файл в корневом каталоге:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^  [L,R=301]

RewriteRule ^([a-zA-Z0-9]{6})$ shortener.php?code=$1 [L]
  • HTTPS-перенаправление: обеспечивает шифрование всего трафика путем перенаправления HTTP-запросов на HTTPS.
  • перезапись URL-адресов: преобразует любой 6-значный буквенно-цифровой короткий код в параметр для shortener.php.

Шаг 4. Повысьте производительность с помощью кэширования и оптимизации.

  1. Кэш браузера: добавить заголовки для кэширования перенаправления на определенный период времени в браузере пользователя:
header("Cache-Control: max-age=3600"); // Cache for 1 hour
  1. Индексирование базы данных: Предоставлять short_code столбец индексируется для более быстрого поиска.
  2. Отслеживайте клики: обновить количество кликов и last_visited каждый раз при доступе к URL-адресу.
$stmt = $pdo->prepare("UPDATE urls SET clicks = clicks + 1, last_visited = NOW() WHERE short_code = :code");
$stmt->execute(['code' => $shortCode]);
  1. Дополнительное кэширование с использованием Memcached или Redis.: кэшировать часто используемые короткие URL-адреса, чтобы уменьшить количество обращений к базе данных.

Шаг 5. Отслеживайте и управляйте URL-адресами с истекающим сроком действия

Чтобы добавить функцию истечения срока действия, убедитесь, что expiry_date Столбец используется для установки срока действия URL-адреса. Проверьте, не истек ли срок действия URL-адреса во время перенаправления:

if ($result['expiry_date'] && strtotime($result['expiry_date']) 

Сколько URL-адресов я могу сохранить?

Количество URL-адресов, которые вы можете сохранить в этом сократителе URL-адресов, в основном зависит от двух факторов:

  1. Длина короткого кода: В приведенном примере короткий код состоит из шести символов и использует комбинацию 62 символа (заглавные буквы AZ, строчные az и цифры 0–9). Используя формулу возможных комбинаций:[[[[

  1. С помощью 6-значного кода теоретически можно сэкономить 56,8 миллиардов уникальных URL-адресов.
  2. ТДругим ограничивающим фактором является размер базы данных. Каждый URL-адрес занимает место в вашей базе данных MySQL. Поскольку URL-адреса могут различаться по длине, общее необходимое пространство для хранения зависит от длины исходных URL-адресов..
    • Сам короткий код (6 символов) займет мало места.
    • исходный URL сохранено как TEXT может содержать до 65 535 байт (около 65 КБ), чего достаточно практически для любого URL.
    • ограничение размера базы данных зависит от вашей конфигурации MySQL и среды хостинга. Например, базы данных MySQL могут обрабатывать таблицы размером до нескольких терабайт, в зависимости от программы хранения и файловой системы.
    • Если у вас такие URL в среднем 100 байт длиной (около 100 символов на URL-адрес) и хотите сохранить 1 миллион URL-адресоввам понадобится примерно 100 МБ местоположения (без учета затрат на базу данных). Если в вашей базе данных есть 1 ГБ Бесплатное хранилище, вы можете хранить ок. 10 миллионов URL-адресовпри условии, что средняя длина URL-адреса составляет 100 символов.

С 6-значным кодом теоретически можно сэкономить до 56,8 миллиардов уникальных URL-адресовчто намного превосходит то, что требуется большинству сокращений URL-адресов. Емкость вашей базы данных, вероятно, будет ограничивать фактический предел. Вам нужно больше или меньше мощности?

  • Более короткие коды: если вы используете более короткие коды, например 5 символов, общее количество комбинаций уменьшится до ( 62^5 = 916 132 832 ), что ограничит прибл. 916 миллионов URL-адресов.
  • Более длинные коды: если вы используете более длинные короткие коды (например, 7 или 8 символов), количество возможных комбинаций значительно увеличивается:
    • 7 символов: ( 62^7 = 3,52 \times 10^{10} ) (около 35 триллионов URL-адресов)
    • 8 символов: ( 62^8 = 218,34 \times 10^{12} ) (~ 218 триллионов URL-адресов)

Вы создали безопасный, оптимизированный, масштабируемый Сокращатель URL-адресов, способный противостоять атакам, справляться с крупномасштабным использованием и обеспечивать удобство работы с пользователем. С Применение HTTPS, ограничение скорости, отслеживание кликови URL-адреса с истекающим сроком действияэто сокращение готово к использованию в реальном мире.

Source