Учитывая большое количество длинных 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 Шаг 1. Настройте безопасную базу данных MySQL
- 2 Шаг 2. Создайте PHP-скрипт с функциями безопасности и производительности.
- 3 Шаг 3. Используйте .htaccess для создания чистых URL-адресов
- 4 Шаг 4. Повысьте производительность с помощью кэширования и оптимизации.
- 5 Шаг 5. Отслеживайте и управляйте URL-адресами с истекающим сроком действия
- 6 Сколько URL-адресов я могу сохранить?
Шаг 1. Настройте безопасную базу данных MySQL
Надежная структура базы данных имеет решающее значение для эффективного хранения и перенаправления URL-адресов. Выполните следующие шаги, чтобы безопасно настроить базу данных MySQL.
- Создать базу данных MySQL (если у вас его еще нет) и создайте пользователя с ограниченными привилегиями, чтобы снизить риски безопасности:
CREATE USER 'url_shortener_user'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT INSERT, SELECT, UPDATE ON your_database.urls TO 'url_shortener_user'@'localhost';
- Создайте таблицу 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-адресов, особенно по мере роста таблицы.
Шаг 2. Создайте PHP-скрипт с функциями безопасности и производительности.
Создайте shortener.php
файл, который:
- Генерирует короткие коды.
- Безопасно сохраняет URL-адрес в базе данных.
- Перенаправляет пользователей, когда они посещают короткий URL-адрес.
- Отслеживает клики и обрабатывает 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";
}
?>
Ключевые улучшения безопасности в коде:
- Проверка URL: гарантирует, что будут сокращены только действительные URL-адреса.
- Ограничение скорости и reCAPTCHA (необязательно): Чтобы предотвратить злоупотребления, внедрите ограничение скорости с помощью таких инструментов, как mod_evasive или используйте Google reCAPTCHA в форме
- Применение 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. Повысьте производительность с помощью кэширования и оптимизации.
- Кэш браузера: добавить заголовки для кэширования перенаправления на определенный период времени в браузере пользователя:
header("Cache-Control: max-age=3600"); // Cache for 1 hour
- Индексирование базы данных: Предоставлять
short_code
столбец индексируется для более быстрого поиска. - Отслеживайте клики: обновить количество кликов и
last_visited
каждый раз при доступе к URL-адресу.
$stmt = $pdo->prepare("UPDATE urls SET clicks = clicks + 1, last_visited = NOW() WHERE short_code = :code");
$stmt->execute(['code' => $shortCode]);
- Дополнительное кэширование с использованием Memcached или Redis.: кэшировать часто используемые короткие URL-адреса, чтобы уменьшить количество обращений к базе данных.
Шаг 5. Отслеживайте и управляйте URL-адресами с истекающим сроком действия
Чтобы добавить функцию истечения срока действия, убедитесь, что expiry_date
Столбец используется для установки срока действия URL-адреса. Проверьте, не истек ли срок действия URL-адреса во время перенаправления:
if ($result['expiry_date'] && strtotime($result['expiry_date'])
Сколько URL-адресов я могу сохранить?
Количество URL-адресов, которые вы можете сохранить в этом сократителе URL-адресов, в основном зависит от двух факторов:
- Длина короткого кода: В приведенном примере короткий код состоит из шести символов и использует комбинацию 62 символа (заглавные буквы AZ, строчные az и цифры 0–9). Используя формулу возможных комбинаций:[[[[
- С помощью 6-значного кода теоретически можно сэкономить 56,8 миллиардов уникальных URL-адресов.
- ТДругим ограничивающим фактором является размер базы данных. Каждый 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-адреса с истекающим сроком действияэто сокращение готово к использованию в реальном мире.