Co to jest skracacz linku
Wyobraź sobie, że chcesz wysłać znajomemu link do konkretnego produktu na Allegro lub lokalizacji w Google Maps. Zamiast zgrabnego adresu, dostajesz "tasiemca", który wygląda tak: https://www.google.com/maps/place/Warszawa/xxxxxxx Skracacz zamienia go w coś takiego: twojadomena.pl/warszawa. Możesz oczywisćie skorzystać z darmowego serwisu typu url shortener jak bitly, natomiast biedahosting jest dla ludzi, którzy lubią działać samodzielnie.
Poza tym:
- Skracacz na własnej domenie to fajna sprawa
- Możesz edytować linki docelowe
- Możesz skrócić coś dla znajomych i być królem internetów :)
Krok 0: Zamów hosting Bieda15
Hosting kosztuje 15 PLN na rok i powinien wystarczyć do tego zastosowania.
Krok 1: Kup domenę
Możesz dzialać na darmowej subdomenie od biedahostingu, ale na własnej wygląda to zdecydowanie lepiej. Możesz poszukać domen w lokalnych, np. waw.pl - dzięki temu będziesz miał większy wybór ciekawych adresów. Możesz poszukać promocji u różnych dostawców - ale pamiętaj, że nawet takie super oferty są droższe przy przedłużeniu za rok.
👉 Kup domenę - link afiliacyjny
Krok 2: Podłącz domenę do hostingu
W panelu domeny zmień ustawienia DNS na ns1.microhost.pl i ns2.microhost.pl i dodaj domenę w panelu swojego hostingu przez Zarządzenie kontami-> Zarządzanie domenami -> dodaj nową. Rozpropagowanie zmian w DNS moze zająć dłuższy czas, dlatego wynik może być widoczny nawet następnego dnia.
Krok 3: Podłącz darmowy certyfikat SSL
W panelu hostingu, który otrzymałeś po zakupie przejdż do Zarządzanie kontami -> certyfikaty SSL. Wybierz "Uzyskaj automatyczny certyfikat od dostawcy ACME". Wypełnij pola i wybierz zapisz.
Krok 4: Kod skracacza
Mój kod skacacza wygenerowała sztuczna inteligencja. Możesz oczywisci napisać sam lub poprosić AI o jeszcze lepszy kod. Pamiętaj, że korzystasz z tego kodu na własne ryzyko.
Krok 5: Panel administratora
Dobra dobra, moze nie panel administratora, ale miejsce gdzie będziesz skracał linki. W moim założeniu katalog jest zabezpieczony hasłem, żeby nikt nieuprawniony nie mógł korzystać ze skracacza. Użyłem podstawowej metody logowania przez plik .htaccess - mozesz użyc czegoś bardziej zaawansowanego. Ale do rzeczy:
- Przejdź do managera plików i do katalogu twojadomena->public_html. Załóż tam folder admin i załóż w nim plik .htaccess
AuthType Basic AuthName "Private link shortener" AuthUserFile sciezka_do/.plik_hasel Require valid-user # Ograniczenie dostępu do wybranych IP Order deny,allow Deny from all Allow from TWOJ_IP
Do zabezpieczenia dostępu do folderu potrzebujesz plik z zaszyfrowanym hasłem, umieść go poza folderem public_html. Online znajdziesz wiele generatorów haseł wpisz "htpasswd online". Możesz też dodać ograniczenie dostępu tylko dla wybranych adresów IP - sprawdź swój adres wyszukująć strony "my ip".
- W folderze admin utwórz plik index.php, kóry zapewni interfejs do generownaia skróconych linków. Kod mozesz rozwijać - dodać usuwanie linków, statystyki, wyszykiwarke itd.
Kod zapisuje skrócone linki do bazy danych sqlite - czyli do pliku links.db, więc może fajnie umieścić go poza public_html? A może zamiast SQLite użyjesz mysql? Bieda rozwiązania zawsze stanowią wstęp do dalszych poszukiwań.
Treść pliku:
<?php $db = new PDO('sqlite:links.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->exec(" CREATE TABLE IF NOT EXISTS links ( id INTEGER PRIMARY KEY AUTOINCREMENT, code TEXT UNIQUE, url TEXT, clicks INTEGER DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP )"); function generateCode($length = 4) { return substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, $length); } $shortUrl = null; // OBSŁUGA ZAPISU (NOWY LUB EDYCJA) if (!empty($_POST['url'])) { $url = trim($_POST['url']); if (!empty($_POST['edit_code'])) { // EDYCJA ISTNIEJĄCEGO LINKU $code = $_POST['edit_code']; $stmt = $db->prepare("UPDATE links SET url = ? WHERE code = ?"); $stmt->execute([$url, $code]); } else { // GENEROWANIE NOWEGO $code = generateCode(); $stmt = $db->prepare("INSERT INTO links (code, url) VALUES (?, ?)"); $stmt->execute([$code, $url]); } $shortUrl = $_SERVER['HTTP_HOST'] . '/' . $code; } // POBIERANIE LINKÓW DO LISTY $allLinks = $db->query("SELECT * FROM links ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC); // POMOCNICZA ZMIENNA DLA FORMULARZA EDYCJI $editUrl = ''; $editCode = ''; if (isset($_GET['edit'])) { $stmt = $db->prepare("SELECT * FROM links WHERE code = ?"); $stmt->execute([$_GET['edit']]); $toEdit = $stmt->fetch(); if ($toEdit) { $editUrl = $toEdit['url']; $editCode = $toEdit['code']; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Bieda skracacz linków v2</title> </head> <body> <h2><?= $editCode ? "Edytuj link: $editCode" : "Skróć link" ?></h2> <p><form method="post" action="?"> <input type="url" name="url" value="<?= htmlspecialchars($editUrl) ?>" placeholder="https://example.com" required> <?php if ($editCode): ?> <input type="hidden" name="edit_code" value="<?= $editCode ?>"> <button>Zapisz zmiany</button></p> <p><a href="?">Anuluj edycję</a></p> <p><?php else: ?> <button>Skróć</button> <?php endif; ?> </form></p> <p><?php if ($shortUrl): ?></p> <p>Gotowe!</p> <p><input value="https://<?= htmlspecialchars($shortUrl) ?>" readonly onclick="this.select()"> <?php endif; ?></p> <h3>Twoje linki:</h3> <p><?php foreach ($allLinks as $link): ?></p> <p><strong>/<?= $link['code'] ?></strong><br> "><?= htmlspecialchars($link['url']) ?> <!--div><?= htmlspecialchars($link['url']) ?></div--></p> <p><span title="Kliknięcia">🖱️ <?= $link['clicks'] ?> | <a href="?edit=<?= $link['code'] ?>">Edytuj</a></p> <p><?php endforeach; ?></p> <p></body> </html>
Utwórz kod realizujący przekierowania
Wyjdź poziom wyżej z folderu admin, utwrórz tam plk .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ redirect.php?code=$1 [L,QSA]
Obok pliku .htaccess utwórz redirect.php o treści:
<?php
$db = new PDO('sqlite:admin/links.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$code = $_GET['code'] ?? '';
$stmt = $db->prepare("SELECT * FROM links WHERE code = ?");
$stmt->execute([$code]);
$link = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$link) {
http_response_code(404);
echo "Link nie istnieje";
exit;
}
$db->prepare("UPDATE links SET clicks = clicks + 1 WHERE code = ?")
->execute([$code]);
header("Location: " . $link['url'], true, 301);
exit;
Dlaczego to działa na tanim hostingu?
Do takiego zadania nie potrzebujesz VPS-a ani chmury. Wystarczy: php i pliki .htaccess Właśnie do takich małych rzeczy powstał BiedaHosting — prosty, tani i bez umów.