From 9261af3e537b12fe952ee4e99419715d432d5f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=93=9C=F0=9D=93=AA=F0=9D=93=AC=F0=9D=93=AE=E2=84=A2?= <71522630+theoneandonlymace@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:27:44 +0200 Subject: [PATCH] Merge branch 'main' into develop --- CONTRIBUTING.md | 31 ++ LICENSE | 67 ++++ README.md | 21 +- backend/api/dns-lookup.php | 161 +++++++++ backend/api/dns-propagation.php | 175 ++++++++++ backend/api/ping-check.php | 179 ++++++++++ backend/api/reverse-dns.php | 209 +++++++++++ backend/api/ssl-check.php | 164 +++++++++ backend/api/whois-lookup.php | 365 +++++++++++++++++++ backend/config/config.php | 17 + backend/config/mail-config.php | 198 +++++++++++ backend/config/products-config.php | 541 +++++++++++++++++++++++++++++ backend/includes/footer.php | 167 +++++++++ backend/includes/functions.php | 98 ++++++ backend/includes/header.php | 81 +++++ demo.html | 4 +- docs/README-OPTIMIZATION.md | 2 +- docs/README-STRUCTURE.md | 20 +- public/.htaccess | 2 +- public/404.php | 4 +- public/500.php | 4 +- public/about.php | 61 ++-- public/agb.php | 4 +- public/assets/css/custom.css | 17 + public/assets/css/style.css | 1 + public/assets/js/contact.js | 1 + public/assets/js/cookie-consent.js | 1 + public/assets/js/main.js | 1 + public/contact-handler.php | 11 +- public/contact.php | 44 ++- public/datenschutz.php | 4 +- public/impressum.php | 4 +- public/index.php | 98 +++++- public/it-dienstleistungen.php | 148 ++++++++ public/mail-gateway.php | 211 ++--------- public/vpc.php | 202 +---------- public/vps.php | 201 +---------- public/webhosting.php | 201 +---------- public/widerruf.php | 136 ++++++++ 39 files changed, 3012 insertions(+), 844 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 backend/api/dns-lookup.php create mode 100644 backend/api/dns-propagation.php create mode 100644 backend/api/ping-check.php create mode 100644 backend/api/reverse-dns.php create mode 100644 backend/api/ssl-check.php create mode 100644 backend/api/whois-lookup.php create mode 100644 backend/config/config.php create mode 100644 backend/config/mail-config.php create mode 100644 backend/config/products-config.php create mode 100644 backend/includes/footer.php create mode 100644 backend/includes/functions.php create mode 100644 backend/includes/header.php create mode 100644 public/assets/css/custom.css create mode 100644 public/assets/css/style.css create mode 100644 public/assets/js/contact.js create mode 100644 public/assets/js/cookie-consent.js create mode 100644 public/assets/js/main.js create mode 100644 public/it-dienstleistungen.php create mode 100644 public/widerruf.php diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1cc9712 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing + +## Commit Message Standard + +Bitte nutze fuer alle Commits dieses Format: + +`: ` + +Beispiele: +- `feat: add dynamic hero text from product config` +- `fix: correct package card price rendering` +- `refactor: centralize product page section labels` + +## Erlaubte Typen + +- `feat` neue Funktionalitaet +- `fix` Bugfix +- `refactor` Umstrukturierung ohne Verhaltensaenderung +- `docs` Dokumentation +- `test` Tests +- `chore` Wartung/Tooling +- `perf` Performance +- `build` Build/Dependencies +- `ci` CI/CD-Aenderungen +- `revert` Ruecknahme eines Commits + +## Regeln + +- Subjekt im Imperativ und klein beginnen. +- Keine Punkte am Ende der Commit-Betreffzeile. +- Optional Scope nutzen, wenn sinnvoll: `feat(ui): ...`, `fix(router): ...`. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0b4229a --- /dev/null +++ b/LICENSE @@ -0,0 +1,67 @@ +Business Source License 1.1 + +Lizenzgeber: HexaHost.de +Lizenzierte Arbeit: HexaHost Backend + Die lizenzierte Arbeit ist urheberrechtlich geschützt + © 2026 HexaHost.de + +Zusätzliche Nutzungsbewilligung: Keine + +Änderungsdatum: 2030-01-16 + +Änderungslizenz: GNU General Public License v3.0 oder später + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Lizenz-Text + +Der Lizenzgeber gewährt Ihnen hiermit das Recht, die lizenzierte Arbeit zu +kopieren, zu modifizieren, abgeleitete Werke zu erstellen, weiterzuverbreiten +und die lizenzierte Arbeit nicht-produktiv zu nutzen. Der Lizenzgeber kann eine +"Zusätzliche Nutzungsbewilligung" (siehe oben) erteilen, die bestimmte +produktive Nutzungen erlaubt. + +Mit Wirkung zum Änderungsdatum (siehe oben) oder zum vierten Jahrestag der +ersten öffentlichen Veröffentlichung einer spezifischen Version der lizenzierten +Arbeit, je nachdem, welcher Zeitpunkt später eintritt, wechselt die hier +erteilte Lizenz automatisch zur Änderungslizenz (siehe oben), und Sie sind +berechtigt, die lizenzierte Arbeit zu jedem Zweck zu nutzen. + +BEGRIFFSBESTIMMUNGEN + +"Lizenzierte Arbeit" bezeichnet alle urheberrechtlich geschützten Werke, die +unter dieser Lizenz lizenziert sind. + +"Änderungslizenz" bezeichnet die Lizenz, die nach dem Änderungsdatum auf die +lizenzierte Arbeit anwendbar ist. + +"Zusätzliche Nutzungsbewilligung" bezeichnet jede zusätzliche Genehmigung, die +der Lizenzgeber gewährt und die bestimmte produktive Nutzungen erlaubt. + +"Produktive Nutzung" bezeichnet jede Nutzung der lizenzierten Arbeit für einen +Zweck, der über die persönliche, nicht-kommerzielle Nutzung hinausgeht. Dies +umfasst, ist aber nicht beschränkt auf: + + (a) Nutzung der lizenzierten Arbeit zur Erbringung von Dienstleistungen für + Dritte; + (b) Nutzung der lizenzierten Arbeit als Teil eines kommerziellen Produkts + oder einer kommerziellen Dienstleistung; + (c) Nutzung der lizenzierten Arbeit zur Generierung von Einnahmen; + (d) Nutzung der lizenzierten Arbeit in einer Unternehmensumgebung. + +GEWÄHRLEISTUNGSAUSSCHLUSS + +DIE LIZENZIERTE ARBEIT WIRD "WIE BESEHEN" ZUR VERFÜGUNG GESTELLT, OHNE +JEGLICHE GEWÄHRLEISTUNG, WEDER AUSDRÜCKLICH NOCH STILLSCHWEIGEND, +EINSCHLIEßLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER +MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON +RECHTEN DRITTER. IN KEINEM FALL HAFTET DER LIZENZGEBER FÜR ANSPRÜCHE, SCHÄDEN +ODER ANDERE VERBINDLICHKEITEN, OB IN EINER VERTRAGS- ODER DELIKTKLAGE ODER +ANDERWEITIG, DIE SICH AUS DER LIZENZIERTEN ARBEIT ODER DER NUTZUNG ODER +ANDEREN GESCHÄFTEN MIT DER LIZENZIERTEN ARBEIT ERGEBEN. + +----------------------------------------------------------------------------- + +Für kommerzielle Lizenzen kontaktieren Sie bitte: kontakt@hexahost.de diff --git a/README.md b/README.md index d71b31b..2449d77 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Eine moderne und umfangreiche Website für das Hosting-Unternehmen HexaHost.de aus Niederbayern. -> ℹ️ **Hinweis:** Dieses Projekt benötigt das [HexaHost-Backend](../HexaHost-Backend) Repository für die vollständige Funktionalität. Das Backend enthält wiederverwendbare PHP-Templates, JavaScript-Module, CSS-Styles und Konfigurationsdateien. +> ℹ️ **Hinweis:** Dieses Projekt benötigt das [HexaHost-Backend](https://git.hexahost.dev/smueller/HexaHost-Backend) Repository für die vollständige Funktionalität. Das Backend enthält wiederverwendbare PHP-Templates, JavaScript-Module, CSS-Styles und Konfigurationsdateien. ## 🚀 Features @@ -61,7 +61,7 @@ HexaHost-Frontend/ │ ├── vps.php # Virtual Private Server │ ├── mail-gateway.php # Mail Gateway │ ├── webhosting.php # Webhosting -│ ├── about.php # Über uns +│ ├── about.php # Über mich │ ├── contact.php # Kontaktseite │ ├── contact-handler.php # Kontaktformular-Backend │ ├── impressum.php # Impressum @@ -273,22 +273,7 @@ Paket-Cards in den entsprechenden Produktseiten duplizieren und anpassen. ## 📄 Lizenz -Dieses Projekt ist unter der **Business Source License 1.1 (BSL)** lizenziert. - -### Was bedeutet das? - -| Erlaubt | Nicht erlaubt (ohne kommerzielle Lizenz) | -|---------|------------------------------------------| -| ✅ Code ansehen & lernen | ❌ Kommerzieller Einsatz | -| ✅ Privater, nicht-kommerzieller Gebrauch | ❌ Nutzung für SaaS/Hosting-Dienste | -| ✅ Modifikationen für persönliche Zwecke | ❌ Unternehmensnutzung | -| ✅ Akademische/Bildungszwecke | ❌ Weiterverkauf oder Sublizenzierung | - -**Änderungsdatum:** Am 16. Januar 2030 wird der Code automatisch unter der **GPL v3** verfügbar. - -**Kommerzielle Lizenz:** Für kommerzielle Nutzung kontaktieren Sie bitte kontakt@hexahost.de - -Siehe [LICENSE](LICENSE) für den vollständigen Lizenztext. +Alle Rechte vorbehalten HexaHost.de ## 🤝 Beitragen diff --git a/backend/api/dns-lookup.php b/backend/api/dns-lookup.php new file mode 100644 index 0000000..ad7cf59 --- /dev/null +++ b/backend/api/dns-lookup.php @@ -0,0 +1,161 @@ + 'Nur GET-Anfragen erlaubt']); + exit; +} + +// Domain-Parameter prüfen +$domain = isset($_GET['domain']) ? trim($_GET['domain']) : ''; + +if (empty($domain)) { + http_response_code(400); + echo json_encode(['error' => 'Domain-Parameter fehlt']); + exit; +} + +// Domain validieren (einfache Prüfung) +if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\-\.]*\.[a-zA-Z]{2,}$/', $domain)) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges Domain-Format']); + exit; +} + +// DNS-Abfrage durchführen +$startTime = microtime(true); +$result = performDnsLookup($domain); +$queryTime = round((microtime(true) - $startTime) * 1000, 2); + +// Ergebnis zurückgeben +echo json_encode([ + 'success' => true, + 'domain' => $domain, + 'query_time_ms' => $queryTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'records' => $result +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * Führt DNS-Lookup für verschiedene Record-Typen durch + */ +function performDnsLookup(string $domain): array { + $records = [ + 'A' => [], + 'AAAA' => [], + 'MX' => [], + 'NS' => [], + 'TXT' => [], + 'CNAME' => [], + 'SOA' => [] + ]; + + // A-Records (IPv4) + $aRecords = @dns_get_record($domain, DNS_A); + if ($aRecords) { + foreach ($aRecords as $record) { + $records['A'][] = [ + 'ip' => $record['ip'], + 'ttl' => $record['ttl'] + ]; + } + } + + // AAAA-Records (IPv6) + $aaaaRecords = @dns_get_record($domain, DNS_AAAA); + if ($aaaaRecords) { + foreach ($aaaaRecords as $record) { + $records['AAAA'][] = [ + 'ipv6' => $record['ipv6'], + 'ttl' => $record['ttl'] + ]; + } + } + + // MX-Records (Mail) + $mxRecords = @dns_get_record($domain, DNS_MX); + if ($mxRecords) { + foreach ($mxRecords as $record) { + $records['MX'][] = [ + 'target' => $record['target'], + 'priority' => $record['pri'], + 'ttl' => $record['ttl'] + ]; + } + // Nach Priorität sortieren + usort($records['MX'], fn($a, $b) => $a['priority'] <=> $b['priority']); + } + + // NS-Records (Nameserver) + $nsRecords = @dns_get_record($domain, DNS_NS); + if ($nsRecords) { + foreach ($nsRecords as $record) { + $records['NS'][] = [ + 'target' => $record['target'], + 'ttl' => $record['ttl'] + ]; + } + } + + // TXT-Records + $txtRecords = @dns_get_record($domain, DNS_TXT); + if ($txtRecords) { + foreach ($txtRecords as $record) { + $records['TXT'][] = [ + 'txt' => $record['txt'], + 'ttl' => $record['ttl'] + ]; + } + } + + // CNAME-Records + $cnameRecords = @dns_get_record($domain, DNS_CNAME); + if ($cnameRecords) { + foreach ($cnameRecords as $record) { + $records['CNAME'][] = [ + 'target' => $record['target'], + 'ttl' => $record['ttl'] + ]; + } + } + + // SOA-Record (Start of Authority) + $soaRecords = @dns_get_record($domain, DNS_SOA); + if ($soaRecords) { + foreach ($soaRecords as $record) { + $records['SOA'][] = [ + 'mname' => $record['mname'] ?? '', + 'rname' => $record['rname'] ?? '', + 'serial' => $record['serial'] ?? 0, + 'refresh' => $record['refresh'] ?? 0, + 'retry' => $record['retry'] ?? 0, + 'expire' => $record['expire'] ?? 0, + 'minimum_ttl' => $record['minimum-ttl'] ?? 0, + 'ttl' => $record['ttl'] + ]; + } + } + + // Leere Arrays entfernen + return array_filter($records, fn($arr) => !empty($arr)); +} diff --git a/backend/api/dns-propagation.php b/backend/api/dns-propagation.php new file mode 100644 index 0000000..62f2949 --- /dev/null +++ b/backend/api/dns-propagation.php @@ -0,0 +1,175 @@ + 'Google', 'ip' => '8.8.8.8', 'location' => 'Global'], + ['name' => 'Google Secondary', 'ip' => '8.8.4.4', 'location' => 'Global'], + ['name' => 'Cloudflare', 'ip' => '1.1.1.1', 'location' => 'Global'], + ['name' => 'Cloudflare Secondary', 'ip' => '1.0.0.1', 'location' => 'Global'], + ['name' => 'Quad9', 'ip' => '9.9.9.9', 'location' => 'Global'], + ['name' => 'OpenDNS', 'ip' => '208.67.222.222', 'location' => 'USA'], + ['name' => 'Comodo', 'ip' => '8.26.56.26', 'location' => 'USA'], + ['name' => 'Level3', 'ip' => '4.2.2.1', 'location' => 'USA'], +]; + +$domain = isset($_GET['domain']) ? trim($_GET['domain']) : ''; +$type = isset($_GET['type']) ? strtoupper(trim($_GET['type'])) : 'A'; + +if (empty($domain)) { + http_response_code(400); + echo json_encode(['error' => 'Domain-Parameter fehlt']); + exit; +} + +if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\-\.]*\.[a-zA-Z]{2,}$/', $domain)) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges Domain-Format']); + exit; +} + +// Erlaubte Record-Typen +$allowedTypes = ['A', 'AAAA', 'MX', 'NS', 'TXT', 'CNAME']; +if (!in_array($type, $allowedTypes)) { + $type = 'A'; +} + +$results = []; +$startTime = microtime(true); + +foreach ($dnsServers as $server) { + $serverResult = [ + 'server' => $server['name'], + 'ip' => $server['ip'], + 'location' => $server['location'], + 'records' => [], + 'status' => 'success', + 'response_time' => 0 + ]; + + $queryStart = microtime(true); + + // DNS-Abfrage mit spezifischem Server via dig (falls verfügbar) oder dns_get_record + $records = queryDnsServer($domain, $type, $server['ip']); + + $serverResult['response_time'] = round((microtime(true) - $queryStart) * 1000, 2); + $serverResult['records'] = $records; + + if (empty($records)) { + $serverResult['status'] = 'no_records'; + } + + $results[] = $serverResult; +} + +$totalTime = round((microtime(true) - $startTime) * 1000, 2); + +// Propagation-Status berechnen +$propagationStatus = calculatePropagationStatus($results); + +echo json_encode([ + 'success' => true, + 'domain' => $domain, + 'record_type' => $type, + 'propagation_status' => $propagationStatus, + 'total_time_ms' => $totalTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'servers' => $results +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * DNS-Abfrage bei spezifischem Server + */ +function queryDnsServer(string $domain, string $type, string $server): array { + $records = []; + + // Versuche zuerst dig zu verwenden (genauer) + $digResult = @shell_exec("dig @{$server} {$domain} {$type} +short +time=2 +tries=1 2>/dev/null"); + + if ($digResult !== null && trim($digResult) !== '') { + $lines = array_filter(explode("\n", trim($digResult))); + foreach ($lines as $line) { + $records[] = trim($line); + } + return $records; + } + + // Fallback auf PHP dns_get_record (verwendet System-DNS) + $dnsType = constant('DNS_' . $type); + $result = @dns_get_record($domain, $dnsType); + + if ($result) { + foreach ($result as $record) { + switch ($type) { + case 'A': + $records[] = $record['ip'] ?? ''; + break; + case 'AAAA': + $records[] = $record['ipv6'] ?? ''; + break; + case 'MX': + $records[] = ($record['pri'] ?? '') . ' ' . ($record['target'] ?? ''); + break; + case 'NS': + case 'CNAME': + $records[] = $record['target'] ?? ''; + break; + case 'TXT': + $records[] = $record['txt'] ?? ''; + break; + } + } + } + + return array_filter($records); +} + +/** + * Berechnet den Propagation-Status + */ +function calculatePropagationStatus(array $results): array { + $totalServers = count($results); + $serversWithRecords = 0; + $allRecords = []; + + foreach ($results as $result) { + if (!empty($result['records'])) { + $serversWithRecords++; + foreach ($result['records'] as $record) { + $allRecords[] = $record; + } + } + } + + // Einzigartige Records + $uniqueRecords = array_unique($allRecords); + + // Konsistenz prüfen (haben alle Server die gleichen Records?) + $isConsistent = count($uniqueRecords) <= 1 || $serversWithRecords === 0; + + $percentage = $totalServers > 0 ? round(($serversWithRecords / $totalServers) * 100) : 0; + + return [ + 'percentage' => $percentage, + 'servers_responding' => $serversWithRecords, + 'total_servers' => $totalServers, + 'is_consistent' => $isConsistent, + 'unique_values' => array_values($uniqueRecords) + ]; +} diff --git a/backend/api/ping-check.php b/backend/api/ping-check.php new file mode 100644 index 0000000..0ee176a --- /dev/null +++ b/backend/api/ping-check.php @@ -0,0 +1,179 @@ + 'Domain-Parameter fehlt']); + exit; +} + +// Protokoll und Pfad entfernen +$domain = preg_replace('/^(https?:\/\/)?/', '', $domain); +$domain = explode('/', $domain)[0]; + +if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\-\.]*\.[a-zA-Z]{2,}$/', $domain)) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges Domain-Format']); + exit; +} + +$startTime = microtime(true); +$results = performConnectivityCheck($domain); +$totalTime = round((microtime(true) - $startTime) * 1000, 2); + +echo json_encode([ + 'success' => true, + 'domain' => $domain, + 'total_time_ms' => $totalTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'results' => $results +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * Führt verschiedene Erreichbarkeitstests durch + */ +function performConnectivityCheck(string $domain): array { + $results = [ + 'dns_resolution' => checkDnsResolution($domain), + 'icmp_ping' => checkIcmpPing($domain), + 'http' => checkHttpConnection($domain, false), + 'https' => checkHttpConnection($domain, true), + 'overall_status' => 'offline' + ]; + + // Overall-Status bestimmen + if ($results['https']['reachable'] || $results['http']['reachable']) { + $results['overall_status'] = 'online'; + } elseif ($results['icmp_ping']['reachable']) { + $results['overall_status'] = 'partial'; + } elseif ($results['dns_resolution']['resolved']) { + $results['overall_status'] = 'dns_only'; + } + + return $results; +} + +/** + * DNS-Auflösung prüfen + */ +function checkDnsResolution(string $domain): array { + $start = microtime(true); + $ip = gethostbyname($domain); + $time = round((microtime(true) - $start) * 1000, 2); + + $resolved = $ip !== $domain; + + return [ + 'resolved' => $resolved, + 'ip' => $resolved ? $ip : null, + 'response_time_ms' => $time + ]; +} + +/** + * ICMP Ping (falls verfügbar) + */ +function checkIcmpPing(string $domain): array { + $result = [ + 'reachable' => false, + 'response_time_ms' => null, + 'packet_loss' => null + ]; + + // Versuche ping-Kommando + $pingResult = @shell_exec("ping -c 3 -W 2 {$domain} 2>/dev/null"); + + if ($pingResult) { + // Prüfe auf erfolgreiche Antworten + if (preg_match('/(\d+)% packet loss/', $pingResult, $lossMatch)) { + $result['packet_loss'] = (int)$lossMatch[1]; + $result['reachable'] = $result['packet_loss'] < 100; + } + + // Durchschnittliche Zeit extrahieren + if (preg_match('/avg.*?=.*?[\d.]+\/([\d.]+)\//', $pingResult, $timeMatch)) { + $result['response_time_ms'] = (float)$timeMatch[1]; + } elseif (preg_match('/time[=<]([\d.]+)\s*ms/', $pingResult, $timeMatch)) { + $result['response_time_ms'] = (float)$timeMatch[1]; + } + } + + return $result; +} + +/** + * HTTP(S)-Verbindung prüfen + */ +function checkHttpConnection(string $domain, bool $https = false): array { + $protocol = $https ? 'https' : 'http'; + $port = $https ? 443 : 80; + $url = "{$protocol}://{$domain}"; + + $result = [ + 'reachable' => false, + 'status_code' => null, + 'response_time_ms' => null, + 'redirect_url' => null, + 'server' => null + ]; + + $start = microtime(true); + + // cURL verwenden + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_NOBODY => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_FOLLOWLOCATION => false, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => 0, + CURLOPT_USERAGENT => 'HexaDNS Ping Check/1.0' + ]); + + $response = curl_exec($ch); + $result['response_time_ms'] = round((microtime(true) - $start) * 1000, 2); + + if ($response !== false) { + $result['status_code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $result['reachable'] = $result['status_code'] > 0; + + // Redirect-URL + $redirectUrl = curl_getinfo($ch, CURLINFO_REDIRECT_URL); + if (!empty($redirectUrl)) { + $result['redirect_url'] = $redirectUrl; + } + + // Server-Header + if (preg_match('/Server:\s*([^\r\n]+)/i', $response, $serverMatch)) { + $result['server'] = trim($serverMatch[1]); + } + } else { + $result['error'] = curl_error($ch); + } + + curl_close($ch); + + return $result; +} diff --git a/backend/api/reverse-dns.php b/backend/api/reverse-dns.php new file mode 100644 index 0000000..4aa832d --- /dev/null +++ b/backend/api/reverse-dns.php @@ -0,0 +1,209 @@ + 'IP-Parameter fehlt']); + exit; +} + +// IPv4 oder IPv6 validieren +$isIPv4 = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); +$isIPv6 = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); + +if (!$isIPv4 && !$isIPv6) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges IP-Format']); + exit; +} + +$startTime = microtime(true); +$result = performReverseLookup($ip, $isIPv6 ? 'IPv6' : 'IPv4'); +$queryTime = round((microtime(true) - $startTime) * 1000, 2); + +echo json_encode([ + 'success' => true, + 'ip' => $ip, + 'ip_version' => $isIPv6 ? 'IPv6' : 'IPv4', + 'query_time_ms' => $queryTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'result' => $result +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * Führt Reverse DNS Lookup durch + */ +function performReverseLookup(string $ip, string $version): array { + $result = [ + 'hostname' => null, + 'ptr_record' => null, + 'additional_info' => [] + ]; + + // PHP gethostbyaddr + $hostname = @gethostbyaddr($ip); + + if ($hostname && $hostname !== $ip) { + $result['hostname'] = $hostname; + + // Verifizieren durch Forward-Lookup + $forwardIp = gethostbyname($hostname); + $result['forward_verified'] = ($forwardIp === $ip); + + // Zusätzliche Infos über den Host sammeln + $result['additional_info'] = getHostInfo($hostname); + } else { + $result['error'] = 'Kein PTR-Record gefunden'; + } + + // PTR-Record direkt abfragen + $ptrRecord = getPtrRecord($ip, $version); + if ($ptrRecord) { + $result['ptr_record'] = $ptrRecord; + } + + // IP-Info (GeoIP wenn verfügbar, sonst Basic-Infos) + $result['ip_info'] = getIpInfo($ip); + + return $result; +} + +/** + * PTR-Record direkt abfragen + */ +function getPtrRecord(string $ip, string $version): ?string { + if ($version === 'IPv4') { + // IPv4: Reverse die Oktette + $parts = array_reverse(explode('.', $ip)); + $ptrDomain = implode('.', $parts) . '.in-addr.arpa'; + } else { + // IPv6: Komplexer - jedes Nibble umkehren + $expanded = expandIPv6($ip); + $nibbles = str_replace(':', '', $expanded); + $reversed = implode('.', array_reverse(str_split($nibbles))); + $ptrDomain = $reversed . '.ip6.arpa'; + } + + $records = @dns_get_record($ptrDomain, DNS_PTR); + + if ($records && !empty($records[0]['target'])) { + return $records[0]['target']; + } + + return null; +} + +/** + * Expandiert eine IPv6-Adresse + */ +function expandIPv6(string $ip): string { + // Ersetze :: mit der richtigen Anzahl von 0000 + if (strpos($ip, '::') !== false) { + $parts = explode('::', $ip); + $left = $parts[0] ? explode(':', $parts[0]) : []; + $right = isset($parts[1]) && $parts[1] ? explode(':', $parts[1]) : []; + $missing = 8 - count($left) - count($right); + $middle = array_fill(0, $missing, '0000'); + $all = array_merge($left, $middle, $right); + } else { + $all = explode(':', $ip); + } + + // Jedes Segment auf 4 Zeichen auffüllen + $all = array_map(function($segment) { + return str_pad($segment, 4, '0', STR_PAD_LEFT); + }, $all); + + return implode(':', $all); +} + +/** + * Sammelt Infos über einen Hostnamen + */ +function getHostInfo(string $hostname): array { + $info = []; + + // Domain-Teile analysieren + $parts = explode('.', $hostname); + $tld = end($parts); + + $info['tld'] = $tld; + + // Bekannte Hosting-Provider erkennen + $providerPatterns = [ + 'amazonaws.com' => 'Amazon AWS', + 'googleusercontent.com' => 'Google Cloud', + 'cloudfront.net' => 'Amazon CloudFront', + 'azure' => 'Microsoft Azure', + 'hetzner' => 'Hetzner', + 'ovh' => 'OVH', + 'digitalocean' => 'DigitalOcean', + 'linode' => 'Linode', + 'vultr' => 'Vultr', + 'contabo' => 'Contabo', + 'netcup' => 'Netcup', + 'strato' => 'Strato', + 'ionos' => 'IONOS', + '1und1' => '1&1', + 'telekom' => 'Deutsche Telekom', + 'vodafone' => 'Vodafone', + ]; + + foreach ($providerPatterns as $pattern => $provider) { + if (stripos($hostname, $pattern) !== false) { + $info['provider'] = $provider; + break; + } + } + + return $info; +} + +/** + * Basis-Infos zur IP + */ +function getIpInfo(string $ip): array { + $info = [ + 'type' => 'unknown' + ]; + + // Private IP-Bereiche prüfen + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + if (preg_match('/^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)/', $ip)) { + $info['type'] = 'private'; + } elseif (preg_match('/^(127\.)/', $ip)) { + $info['type'] = 'loopback'; + } else { + $info['type'] = 'public'; + } + } else { + // IPv6 + if (preg_match('/^(fc|fd)/i', $ip)) { + $info['type'] = 'private'; + } elseif (preg_match('/^::1$/', $ip) || preg_match('/^fe80:/i', $ip)) { + $info['type'] = 'loopback/link-local'; + } else { + $info['type'] = 'public'; + } + } + + return $info; +} diff --git a/backend/api/ssl-check.php b/backend/api/ssl-check.php new file mode 100644 index 0000000..79e13cb --- /dev/null +++ b/backend/api/ssl-check.php @@ -0,0 +1,164 @@ + 'Domain-Parameter fehlt']); + exit; +} + +// Protokoll und Pfad entfernen +$domain = preg_replace('/^(https?:\/\/)?/', '', $domain); +$domain = explode('/', $domain)[0]; +$domain = explode(':', $domain)[0]; // Port entfernen + +if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\-\.]*\.[a-zA-Z]{2,}$/', $domain)) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges Domain-Format']); + exit; +} + +$startTime = microtime(true); +$sslData = checkSslCertificate($domain); +$queryTime = round((microtime(true) - $startTime) * 1000, 2); + +echo json_encode([ + 'success' => $sslData['success'], + 'domain' => $domain, + 'query_time_ms' => $queryTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'ssl' => $sslData +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * Prüft SSL-Zertifikat einer Domain + */ +function checkSslCertificate(string $domain): array { + $result = [ + 'success' => false, + 'has_ssl' => false, + 'is_valid' => false, + 'error' => null, + 'certificate' => null + ]; + + // Stream Context für SSL + $context = stream_context_create([ + 'ssl' => [ + 'capture_peer_cert' => true, + 'verify_peer' => false, + 'verify_peer_name' => false, + ] + ]); + + // Verbindung herstellen + $socket = @stream_socket_client( + "ssl://{$domain}:443", + $errno, + $errstr, + 10, // Timeout + STREAM_CLIENT_CONNECT, + $context + ); + + if (!$socket) { + // Versuche ohne SSL (um zu prüfen ob Server erreichbar) + $httpSocket = @fsockopen($domain, 80, $errno, $errstr, 5); + if ($httpSocket) { + fclose($httpSocket); + $result['error'] = 'Kein SSL-Zertifikat auf Port 443 gefunden'; + } else { + $result['error'] = "Verbindung fehlgeschlagen: {$errstr}"; + } + return $result; + } + + $result['has_ssl'] = true; + $result['success'] = true; + + // Zertifikat extrahieren + $params = stream_context_get_params($socket); + $cert = $params['options']['ssl']['peer_certificate'] ?? null; + + if ($cert) { + $certInfo = openssl_x509_parse($cert); + + if ($certInfo) { + $validFrom = $certInfo['validFrom_time_t'] ?? 0; + $validTo = $certInfo['validTo_time_t'] ?? 0; + $now = time(); + + $isExpired = $now > $validTo; + $isNotYetValid = $now < $validFrom; + $result['is_valid'] = !$isExpired && !$isNotYetValid; + + // Tage bis Ablauf + $daysUntilExpiry = floor(($validTo - $now) / 86400); + + // Subject Alternative Names (SANs) + $sans = []; + if (isset($certInfo['extensions']['subjectAltName'])) { + $sanStr = $certInfo['extensions']['subjectAltName']; + preg_match_all('/DNS:([^,\s]+)/', $sanStr, $matches); + $sans = $matches[1] ?? []; + } + + // Issuer aufbereiten + $issuer = []; + if (isset($certInfo['issuer'])) { + if (isset($certInfo['issuer']['O'])) $issuer['organization'] = $certInfo['issuer']['O']; + if (isset($certInfo['issuer']['CN'])) $issuer['common_name'] = $certInfo['issuer']['CN']; + if (isset($certInfo['issuer']['C'])) $issuer['country'] = $certInfo['issuer']['C']; + } + + // Subject aufbereiten + $subject = []; + if (isset($certInfo['subject'])) { + if (isset($certInfo['subject']['CN'])) $subject['common_name'] = $certInfo['subject']['CN']; + if (isset($certInfo['subject']['O'])) $subject['organization'] = $certInfo['subject']['O']; + } + + $result['certificate'] = [ + 'subject' => $subject, + 'issuer' => $issuer, + 'valid_from' => date('Y-m-d H:i:s', $validFrom), + 'valid_to' => date('Y-m-d H:i:s', $validTo), + 'days_until_expiry' => $daysUntilExpiry, + 'is_expired' => $isExpired, + 'serial_number' => $certInfo['serialNumberHex'] ?? null, + 'signature_algorithm' => $certInfo['signatureTypeSN'] ?? null, + 'san_domains' => $sans, + 'version' => $certInfo['version'] ?? null, + ]; + + // Warnung wenn bald ablaufend + if ($daysUntilExpiry <= 30 && $daysUntilExpiry > 0) { + $result['warning'] = "Zertifikat läuft in {$daysUntilExpiry} Tagen ab!"; + } elseif ($isExpired) { + $result['error'] = 'Zertifikat ist abgelaufen!'; + $result['is_valid'] = false; + } + } + } + + fclose($socket); + return $result; +} diff --git a/backend/api/whois-lookup.php b/backend/api/whois-lookup.php new file mode 100644 index 0000000..5dc9ed6 --- /dev/null +++ b/backend/api/whois-lookup.php @@ -0,0 +1,365 @@ + 'Domain-Parameter fehlt']); + exit; +} + +// Nur Root-Domain extrahieren +$domain = extractRootDomain($domain); + +if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9\-]*\.[a-zA-Z]{2,}$/', $domain)) { + http_response_code(400); + echo json_encode(['error' => 'Ungültiges Domain-Format']); + exit; +} + +$startTime = microtime(true); +$whoisData = performWhoisLookup($domain); +$queryTime = round((microtime(true) - $startTime) * 1000, 2); + +if ($whoisData === null) { + http_response_code(500); + echo json_encode(['error' => 'WHOIS-Abfrage fehlgeschlagen']); + exit; +} + +echo json_encode([ + 'success' => true, + 'domain' => $domain, + 'query_time_ms' => $queryTime, + 'timestamp' => date('Y-m-d H:i:s'), + 'whois' => $whoisData +], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +/** + * Extrahiert die Root-Domain (ohne Subdomain) + */ +function extractRootDomain(string $domain): string { + $domain = strtolower($domain); + $domain = preg_replace('/^(https?:\/\/)?(www\.)?/', '', $domain); + $domain = explode('/', $domain)[0]; + + $parts = explode('.', $domain); + if (count($parts) > 2) { + // Einfache Logik: nimm die letzten 2 Teile + // (funktioniert nicht perfekt für .co.uk etc., aber gut genug) + return implode('.', array_slice($parts, -2)); + } + + return $domain; +} + +/** + * Führt WHOIS-Lookup durch + */ +function performWhoisLookup(string $domain): ?array { + // Primär: Socket-basierte Abfrage (funktioniert ohne shell_exec) + $whoisRaw = whoisViaSocket($domain); + + // Fallback: Shell-Kommando (sicher escaped) + if (empty($whoisRaw) && function_exists('shell_exec')) { + $escapedDomain = escapeshellarg($domain); + $whoisRaw = @shell_exec("whois {$escapedDomain} 2>/dev/null"); + } + + if (empty($whoisRaw)) { + return null; + } + + // Parse WHOIS-Daten + return parseWhoisData($whoisRaw, $domain); +} + +/** + * WHOIS-Abfrage über Socket (unabhängig von shell_exec) + */ +function whoisViaSocket(string $domain): ?string { + $whoisServer = getWhoisServer($domain); + + if (!$whoisServer) { + return null; + } + + $result = queryWhoisServer($whoisServer, $domain); + + // Prüfe auf Weiterleitungen zu anderen WHOIS-Servern + if ($result && preg_match('/Registrar WHOIS Server:\s*(\S+)/i', $result, $matches)) { + $referralServer = trim($matches[1]); + if ($referralServer && $referralServer !== $whoisServer) { + $referralResult = queryWhoisServer($referralServer, $domain); + if ($referralResult) { + $result = $referralResult; + } + } + } + + return $result; +} + +/** + * Abfrage an einen spezifischen WHOIS-Server + */ +function queryWhoisServer(string $server, string $domain): ?string { + $port = 43; + $timeout = 10; + + $socket = @fsockopen($server, $port, $errno, $errstr, $timeout); + + if (!$socket) { + return null; + } + + // Setze Stream-Timeout + stream_set_timeout($socket, $timeout); + + // Sende Anfrage + fwrite($socket, $domain . "\r\n"); + + // Lese Antwort + $response = ''; + while (!feof($socket)) { + $response .= fread($socket, 8192); + } + + fclose($socket); + + return !empty($response) ? $response : null; +} + +/** + * Ermittelt den zuständigen WHOIS-Server für eine TLD + */ +function getWhoisServer(string $domain): ?string { + $parts = explode('.', $domain); + $tld = strtolower(end($parts)); + + // Bekannte WHOIS-Server nach TLD + $whoisServers = [ + // Generische TLDs + 'com' => 'whois.verisign-grs.com', + 'net' => 'whois.verisign-grs.com', + 'org' => 'whois.pir.org', + 'info' => 'whois.afilias.net', + 'biz' => 'whois.biz', + 'name' => 'whois.nic.name', + 'mobi' => 'whois.dotmobiregistry.net', + 'pro' => 'whois.registrypro.pro', + 'aero' => 'whois.aero', + 'asia' => 'whois.nic.asia', + 'cat' => 'whois.nic.cat', + 'coop' => 'whois.nic.coop', + 'edu' => 'whois.educause.edu', + 'gov' => 'whois.dotgov.gov', + 'int' => 'whois.iana.org', + 'jobs' => 'whois.nic.jobs', + 'mil' => 'whois.nic.mil', + 'museum' => 'whois.museum', + 'post' => 'whois.dotpostregistry.net', + 'tel' => 'whois.nic.tel', + 'travel' => 'whois.nic.travel', + 'xxx' => 'whois.nic.xxx', + + // Neue gTLDs + 'app' => 'whois.nic.google', + 'dev' => 'whois.nic.google', + 'page' => 'whois.nic.google', + 'blog' => 'whois.nic.blog', + 'cloud' => 'whois.nic.cloud', + 'shop' => 'whois.nic.shop', + 'store' => 'whois.nic.store', + 'online' => 'whois.nic.online', + 'site' => 'whois.nic.site', + 'website' => 'whois.nic.website', + 'tech' => 'whois.nic.tech', + 'io' => 'whois.nic.io', + 'co' => 'whois.nic.co', + 'me' => 'whois.nic.me', + 'tv' => 'whois.nic.tv', + 'cc' => 'ccwhois.verisign-grs.com', + 'ws' => 'whois.website.ws', + + // Europäische ccTLDs + 'de' => 'whois.denic.de', + 'at' => 'whois.nic.at', + 'ch' => 'whois.nic.ch', + 'li' => 'whois.nic.li', + 'uk' => 'whois.nic.uk', + 'fr' => 'whois.nic.fr', + 'it' => 'whois.nic.it', + 'es' => 'whois.nic.es', + 'pt' => 'whois.dns.pt', + 'nl' => 'whois.domain-registry.nl', + 'be' => 'whois.dns.be', + 'pl' => 'whois.dns.pl', + 'cz' => 'whois.nic.cz', + 'sk' => 'whois.sk-nic.sk', + 'hu' => 'whois.nic.hu', + 'ro' => 'whois.rotld.ro', + 'bg' => 'whois.register.bg', + 'hr' => 'whois.dns.hr', + 'si' => 'whois.register.si', + 'rs' => 'whois.rnids.rs', + 'gr' => 'grwhois.ics.forth.gr', + 'dk' => 'whois.punktum.dk', + 'se' => 'whois.iis.se', + 'no' => 'whois.norid.no', + 'fi' => 'whois.fi', + 'ie' => 'whois.iedr.ie', + 'eu' => 'whois.eu', + 'lu' => 'whois.dns.lu', + + // Andere ccTLDs + 'ru' => 'whois.tcinet.ru', + 'ua' => 'whois.ua', + 'us' => 'whois.nic.us', + 'ca' => 'whois.cira.ca', + 'mx' => 'whois.mx', + 'br' => 'whois.registro.br', + 'ar' => 'whois.nic.ar', + 'au' => 'whois.auda.org.au', + 'nz' => 'whois.srs.net.nz', + 'jp' => 'whois.jprs.jp', + 'kr' => 'whois.kr', + 'cn' => 'whois.cnnic.cn', + 'in' => 'whois.registry.in', + 'sg' => 'whois.sgnic.sg', + 'hk' => 'whois.hkirc.hk', + 'tw' => 'whois.twnic.net.tw', + 'za' => 'whois.registry.net.za', + ]; + + // Spezielle Behandlung für .co.uk, .com.au etc. + if (count($parts) >= 2) { + $sld = $parts[count($parts) - 2]; + $combinedTld = $sld . '.' . $tld; + + $secondLevelTlds = [ + 'co.uk' => 'whois.nic.uk', + 'org.uk' => 'whois.nic.uk', + 'me.uk' => 'whois.nic.uk', + 'com.au' => 'whois.auda.org.au', + 'net.au' => 'whois.auda.org.au', + 'org.au' => 'whois.auda.org.au', + 'co.nz' => 'whois.srs.net.nz', + 'com.br' => 'whois.registro.br', + ]; + + if (isset($secondLevelTlds[$combinedTld])) { + return $secondLevelTlds[$combinedTld]; + } + } + + return $whoisServers[$tld] ?? 'whois.iana.org'; +} + +/** + * Parsed WHOIS-Rohdaten in strukturiertes Format + */ +function parseWhoisData(string $raw, string $domain): array { + $data = [ + 'raw' => $raw, + 'parsed' => [ + 'domain_name' => $domain, + 'registrar' => null, + 'registrar_url' => null, + 'creation_date' => null, + 'expiration_date' => null, + 'updated_date' => null, + 'status' => [], + 'nameservers' => [], + 'dnssec' => null, + ] + ]; + + $lines = explode("\n", $raw); + + foreach ($lines as $line) { + $line = trim($line); + if (empty($line) || strpos($line, '%') === 0 || strpos($line, '#') === 0) { + continue; + } + + // Key: Value Format + if (strpos($line, ':') !== false) { + list($key, $value) = array_map('trim', explode(':', $line, 2)); + $keyLower = strtolower($key); + + // Registrar + if (strpos($keyLower, 'registrar') !== false && strpos($keyLower, 'abuse') === false && strpos($keyLower, 'url') === false) { + if (empty($data['parsed']['registrar'])) { + $data['parsed']['registrar'] = $value; + } + } + + // Registrar URL + if (strpos($keyLower, 'registrar') !== false && strpos($keyLower, 'url') !== false) { + $data['parsed']['registrar_url'] = $value; + } + + // Erstellungsdatum + if (preg_match('/(creation|created|registered)/i', $keyLower) && strpos($keyLower, 'registrar') === false) { + if (empty($data['parsed']['creation_date'])) { + $data['parsed']['creation_date'] = $value; + } + } + + // Ablaufdatum + if (preg_match('/(expir|paid-till)/i', $keyLower)) { + if (empty($data['parsed']['expiration_date'])) { + $data['parsed']['expiration_date'] = $value; + } + } + + // Aktualisierungsdatum + if (preg_match('/(updated|modified|changed)/i', $keyLower) && strpos($keyLower, 'registrar') === false) { + if (empty($data['parsed']['updated_date'])) { + $data['parsed']['updated_date'] = $value; + } + } + + // Status + if (preg_match('/(status|state)/i', $keyLower) && !empty($value)) { + $data['parsed']['status'][] = $value; + } + + // Nameserver + if (preg_match('/^(name.?server|nserver)/i', $keyLower) && !empty($value)) { + $ns = strtolower(explode(' ', $value)[0]); + if (!in_array($ns, $data['parsed']['nameservers'])) { + $data['parsed']['nameservers'][] = $ns; + } + } + + // DNSSEC + if (strpos($keyLower, 'dnssec') !== false) { + $data['parsed']['dnssec'] = $value; + } + } + } + + // Status einzigartig machen + $data['parsed']['status'] = array_unique($data['parsed']['status']); + + return $data; +} diff --git a/backend/config/config.php b/backend/config/config.php new file mode 100644 index 0000000..60968a7 --- /dev/null +++ b/backend/config/config.php @@ -0,0 +1,17 @@ + diff --git a/backend/config/mail-config.php b/backend/config/mail-config.php new file mode 100644 index 0000000..46f0164 --- /dev/null +++ b/backend/config/mail-config.php @@ -0,0 +1,198 @@ + 'HexaHost.de Contact Form', + 'X-Priority' => '3', + 'X-MSMail-Priority' => 'Normal', + 'Importance' => 'Normal', + 'X-Report-Abuse' => 'Please report abuse here: abuse@hexahost.de', + 'List-Unsubscribe' => '', + 'Precedence' => 'bulk' +]); + +// Erlaubte Domains für E-Mail-Adressen (optional) +define('ALLOWED_EMAIL_DOMAINS', [ + // Leer lassen für alle Domains zu erlauben + // 'gmail.com', + // 'outlook.com', + // 'web.de', + // 'gmx.de' +]); + +// Blacklist für E-Mail-Adressen (optional) +define('BLACKLISTED_EMAILS', [ + // 'spam@example.com', + // 'test@test.com' +]); + +// Validierung der Konfiguration +if (!defined('SMTP_HOST') || !defined('SMTP_USERNAME') || !defined('SMTP_PASSWORD')) { + die('SMTP-Konfiguration ist unvollständig. Bitte überprüfen Sie die mail-config.php'); +} + +// Überprüfung der E-Mail-Adressen +if (!filter_var(SMTP_FROM_EMAIL, FILTER_VALIDATE_EMAIL)) { + die('Ungültige SMTP_FROM_EMAIL Adresse'); +} + +if (!filter_var(SMTP_TO_EMAIL, FILTER_VALIDATE_EMAIL)) { + die('Ungültige SMTP_TO_EMAIL Adresse'); +} + +// Logging-Funktion +function logEmail($type, $data) { + if (!LOG_EMAILS) return; + + $logFile = __DIR__ . '/../logs/email.log'; + $logDir = dirname($logFile); + + if (!is_dir($logDir)) { + mkdir($logDir, 0755, true); + } + + $timestamp = date('Y-m-d H:i:s'); + $logEntry = "[$timestamp] $type: " . json_encode($data) . "\n"; + + file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX); +} + +// Hilfsfunktion für E-Mail-Validierung +function isValidEmail($email) { + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + return false; + } + + // Prüfe Blacklist + if (in_array($email, BLACKLISTED_EMAILS)) { + return false; + } + + // Prüfe Domain-Whitelist (falls gesetzt) + if (!empty(ALLOWED_EMAIL_DOMAINS)) { + $domain = substr(strrchr($email, "@"), 1); + if (!in_array($domain, ALLOWED_EMAIL_DOMAINS)) { + return false; + } + } + + return true; +} + +// CSRF Token generieren (wird in functions.php verwendet) +// Hinweis: Diese Funktion existiert auch in functions.php - hier nur als Fallback +if (!function_exists('generateCSRFToken')) { + function generateCSRFToken() { + if (!isset($_SESSION['csrf_token'])) { + $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); + } + return $_SESSION['csrf_token']; + } +} + +// CSRF Token validieren +if (!function_exists('validateCSRFToken')) { + function validateCSRFToken($token) { + return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token); + } +} + +/** + * Hilfsfunktion zum Abrufen der Konfiguration als Array + * Kompatibilität mit contact-handler.php + * + * @param string|null $key Optional: einzelner Schlüssel + * @return mixed Konfigurationsarray oder einzelner Wert + */ +function getHexaHostConfig($key = null) { + $config = [ + // SMTP Server-Einstellungen + 'smtp_host' => SMTP_HOST, + 'smtp_port' => SMTP_PORT, + 'smtp_username' => SMTP_USERNAME, + 'smtp_password' => SMTP_PASSWORD, + 'smtp_encryption' => 'tls', + + // Absender/Empfänger + 'from_email' => SMTP_FROM_EMAIL, + 'from_name' => 'HexaHost.de Kontaktformular', + 'to_email' => SMTP_TO_EMAIL, + 'to_name' => 'HexaHost Support', + + // Sicherheit + 'max_requests_per_hour' => MAX_REQUESTS_PER_HOUR, + 'honeypot_field' => 'website', + + // Debug + 'debug_mode' => DEBUG_MODE, + 'log_errors' => LOG_EMAILS, + ]; + + if ($key === null) { + return $config; + } + + return $config[$key] ?? null; +} +?> \ No newline at end of file diff --git a/backend/config/products-config.php b/backend/config/products-config.php new file mode 100644 index 0000000..74e128a --- /dev/null +++ b/backend/config/products-config.php @@ -0,0 +1,541 @@ + 'Virtual Private Container', + 'short_name' => 'VPC', + 'description' => 'Effiziente LXC-Container auf Proxmox-Basis', + 'min_price' => '4,99', + 'hero_highlight' => 'auf Proxmox LXC', + 'hero_description' => 'Erleben Sie die Effizienz von Linux-Containern mit der Zuverlässigkeit von Proxmox. Unsere VPC-Lösungen bieten optimale Performance bei minimalem Ressourcenverbrauch.', + 'packages_title' => 'VPC Pakete', + 'packages_description' => 'Wählen Sie das perfekte Container-Paket für Ihre Anforderungen', + 'cta_title' => 'Bereit für Ihren VPC?', + 'cta_description' => 'Starten Sie noch heute mit einem Virtual Private Container', + 'page_title' => 'Virtual Private Container - Effiziente LXC Container | HexaHost.de', + 'page_description' => 'Virtual Private Container auf Proxmox LXC-Basis. Effiziente und preiswerte Container-Lösungen ab 4,99€/Monat bei HexaHost.de', + 'packages' => [ + 'starter' => [ + 'name' => 'VPC Starter', + 'price' => '4,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '1 vCore'], + ['label' => 'RAM', 'value' => '1 GB'], + ['label' => 'SSD Speicher', 'value' => '20 GB'], + ['label' => 'Traffic', 'value' => '1 TB'], + ['label' => 'IPv4 Adressen', 'value' => '1'], + ], + 'features' => [ + 'Proxmox LXC Container', + 'Root-Zugriff', + 'SSH-Zugang', + 'Backup inklusive', + '24/7 Monitoring', + ], + ], + 'business' => [ + 'name' => 'VPC Business', + 'price' => '9,99', + 'featured' => true, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '2 vCores'], + ['label' => 'RAM', 'value' => '4 GB'], + ['label' => 'SSD Speicher', 'value' => '80 GB'], + ['label' => 'Traffic', 'value' => '3 TB'], + ['label' => 'IPv4 Adressen', 'value' => '1'], + ], + 'features' => [ + 'Proxmox LXC Container', + 'Root-Zugriff', + 'SSH-Zugang', + 'Tägliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + ], + ], + 'professional' => [ + 'name' => 'VPC Professional', + 'price' => '19,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '4 vCores'], + ['label' => 'RAM', 'value' => '8 GB'], + ['label' => 'SSD Speicher', 'value' => '160 GB'], + ['label' => 'Traffic', 'value' => '5 TB'], + ['label' => 'IPv4 Adressen', 'value' => '2'], + ], + 'features' => [ + 'Proxmox LXC Container', + 'Root-Zugriff', + 'SSH-Zugang', + 'Stündliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + 'Priority Support', + ], + ], + 'enterprise' => [ + 'name' => 'VPC Enterprise', + 'price' => '39,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '8 vCores'], + ['label' => 'RAM', 'value' => '16 GB'], + ['label' => 'SSD Speicher', 'value' => '320 GB'], + ['label' => 'Traffic', 'value' => '10 TB'], + ['label' => 'IPv4 Adressen', 'value' => '3'], + ], + 'features' => [ + 'Proxmox LXC Container', + 'Root-Zugriff', + 'SSH-Zugang', + 'Stündliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + 'Priority Support', + 'Individuelle Konfiguration', + ], + ], + ], +]; + +// ============================================================================ +// VIRTUAL PRIVATE SERVER (VPS) +// ============================================================================ +$PRODUCTS['vps'] = [ + 'name' => 'Virtual Private Server', + 'short_name' => 'VPS', + 'description' => 'Vollwertige KVM-Virtualisierung mit Root-Zugriff', + 'min_price' => '9,99', + 'hero_highlight' => 'auf Proxmox KVM', + 'hero_description' => 'Maximale Flexibilität und Kontrolle mit vollwertiger KVM-Virtualisierung. Installieren Sie jedes Betriebssystem und genießen Sie vollständigen Root-Zugriff.', + 'packages_title' => 'VPS Pakete', + 'packages_description' => 'Wählen Sie das perfekte VPS-Paket für Ihre Anforderungen', + 'cta_title' => 'Bereit für Ihren VPS?', + 'cta_description' => 'Starten Sie noch heute mit einem Virtual Private Server', + 'page_title' => 'Virtual Private Server - KVM Virtualisierung | HexaHost.de', + 'page_description' => 'Virtual Private Server auf Proxmox KVM-Basis. Vollwertige Virtualisierung mit Root-Zugriff ab 9,99€/Monat bei HexaHost.de', + 'packages' => [ + 'starter' => [ + 'name' => 'VPS Starter', + 'price' => '9,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '1 vCore'], + ['label' => 'RAM', 'value' => '2 GB'], + ['label' => 'SSD Speicher', 'value' => '40 GB'], + ['label' => 'Traffic', 'value' => '2 TB'], + ['label' => 'IPv4 Adressen', 'value' => '1'], + ], + 'features' => [ + 'Proxmox KVM Virtualisierung', + 'Root-Zugriff', + 'SSH-Zugang', + 'Backup inklusive', + '24/7 Monitoring', + ], + ], + 'business' => [ + 'name' => 'VPS Business', + 'price' => '19,99', + 'featured' => true, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '2 vCores'], + ['label' => 'RAM', 'value' => '4 GB'], + ['label' => 'SSD Speicher', 'value' => '80 GB'], + ['label' => 'Traffic', 'value' => '4 TB'], + ['label' => 'IPv4 Adressen', 'value' => '1'], + ], + 'features' => [ + 'Proxmox KVM Virtualisierung', + 'Root-Zugriff', + 'SSH-Zugang', + 'Tägliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + ], + ], + 'professional' => [ + 'name' => 'VPS Professional', + 'price' => '39,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '4 vCores'], + ['label' => 'RAM', 'value' => '8 GB'], + ['label' => 'SSD Speicher', 'value' => '160 GB'], + ['label' => 'Traffic', 'value' => '8 TB'], + ['label' => 'IPv4 Adressen', 'value' => '2'], + ], + 'features' => [ + 'Proxmox KVM Virtualisierung', + 'Root-Zugriff', + 'SSH-Zugang', + 'Stündliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + 'Priority Support', + ], + ], + 'enterprise' => [ + 'name' => 'VPS Enterprise', + 'price' => '79,99', + 'featured' => false, + 'specs' => [ + ['label' => 'CPU Kerne', 'value' => '8 vCores'], + ['label' => 'RAM', 'value' => '16 GB'], + ['label' => 'SSD Speicher', 'value' => '320 GB'], + ['label' => 'Traffic', 'value' => '15 TB'], + ['label' => 'IPv4 Adressen', 'value' => '3'], + ], + 'features' => [ + 'Proxmox KVM Virtualisierung', + 'Root-Zugriff', + 'SSH-Zugang', + 'Stündliches Backup', + '24/7 Monitoring', + 'Snapshot-Funktion', + 'Priority Support', + 'Individuelle Konfiguration', + ], + ], + ], +]; + +// ============================================================================ +// MAIL GATEWAY +// ============================================================================ +$PRODUCTS['mail-gateway'] = [ + 'name' => 'Mail Gateway', + 'short_name' => 'Mail', + 'description' => 'Professioneller E-Mail-Schutz für Unternehmen', + 'min_price' => '4,99', + 'hero_highlight' => 'für Unternehmen', + 'hero_description' => 'Professionelle E-Mail-Infrastruktur mit maximalem Schutz vor Spam und Malware. Sichern Sie Ihre geschäftliche Kommunikation mit unseren Mail Gateway Lösungen.', + 'packages_title' => 'Mail Gateway Pakete', + 'packages_description' => 'Wählen Sie das passende Mail Gateway Paket für Ihr Unternehmen', + 'cta_title' => 'Bereit für professionelle E-Mail-Kommunikation?', + 'cta_description' => 'Starten Sie noch heute mit unserem Mail Gateway', + 'page_title' => 'Mail Gateway - Professionelle E-Mail-Lösungen | HexaHost.de', + 'page_description' => 'Professionelle Mail Gateway Lösungen für Unternehmen. Spam-Schutz, E-Mail-Archivierung und sichere E-Mail-Kommunikation bei HexaHost.de', + 'packages' => [ + 'starter' => [ + 'name' => 'Mail Starter', + 'price' => '4,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Postfächer', 'value' => '5'], + ['label' => 'Speicher/Postfach', 'value' => '5 GB'], + ['label' => 'Domains', 'value' => '1'], + ['label' => 'E-Mails/Tag', 'value' => '500'], + ], + 'features' => [ + 'Spam-Filter', + 'Virus-Schutz', + 'Webmail', + 'IMAP/POP3', + 'SSL/TLS Verschlüsselung', + ], + ], + 'business' => [ + 'name' => 'Mail Business', + 'price' => '14,99', + 'featured' => true, + 'specs' => [ + ['label' => 'Postfächer', 'value' => '25'], + ['label' => 'Speicher/Postfach', 'value' => '10 GB'], + ['label' => 'Domains', 'value' => '3'], + ['label' => 'E-Mails/Tag', 'value' => '2.000'], + ], + 'features' => [ + 'Spam-Filter (erweitert)', + 'Virus-Schutz', + 'Webmail', + 'IMAP/POP3', + 'SSL/TLS Verschlüsselung', + 'E-Mail Archivierung (30 Tage)', + 'Kalender & Kontakte', + ], + ], + 'professional' => [ + 'name' => 'Mail Professional', + 'price' => '29,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Postfächer', 'value' => '100'], + ['label' => 'Speicher/Postfach', 'value' => '25 GB'], + ['label' => 'Domains', 'value' => '10'], + ['label' => 'E-Mails/Tag', 'value' => '10.000'], + ], + 'features' => [ + 'Spam-Filter (KI-gestützt)', + 'Virus-Schutz', + 'Webmail', + 'IMAP/POP3', + 'SSL/TLS Verschlüsselung', + 'E-Mail Archivierung (1 Jahr)', + 'Kalender & Kontakte', + 'ActiveSync für Mobile', + ], + ], + 'enterprise' => [ + 'name' => 'Mail Enterprise', + 'price' => '59,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Postfächer', 'value' => 'Unbegrenzt'], + ['label' => 'Speicher/Postfach', 'value' => '50 GB'], + ['label' => 'Domains', 'value' => 'Unbegrenzt'], + ['label' => 'E-Mails/Tag', 'value' => 'Unbegrenzt'], + ], + 'features' => [ + 'Spam-Filter (KI-gestützt)', + 'Virus-Schutz', + 'Webmail', + 'IMAP/POP3', + 'SSL/TLS Verschlüsselung', + 'E-Mail Archivierung (10 Jahre)', + 'Kalender & Kontakte', + 'ActiveSync für Mobile', + 'Dedizierte IP', + 'Priority Support', + ], + ], + ], +]; + +// ============================================================================ +// WEBHOSTING +// ============================================================================ +$PRODUCTS['webhosting'] = [ + 'name' => 'Webhosting', + 'short_name' => 'Webhosting', + 'description' => 'Klassisches Hosting mit PHP, MySQL und SSL', + 'min_price' => '1,99', + 'hero_highlight' => 'Alles für Ihre Website', + 'hero_description' => 'Klassisches Webhosting mit allem, was Sie für eine erfolgreiche Website benötigen. PHP, MySQL, SSL-Zertifikate und E-Mail-Postfächer - alles inklusive.', + 'packages_title' => 'Webhosting Pakete', + 'packages_description' => 'Von der ersten Website bis zum professionellen Online-Shop', + 'cta_title' => 'Bereit für Ihr Webhosting?', + 'cta_description' => 'Starten Sie noch heute mit professionellem Webhosting', + 'page_title' => 'Webhosting - Klassisches Hosting für Websites | HexaHost.de', + 'page_description' => 'Webhosting mit PHP, MySQL und SSL-Zertifikaten. Klassisches Hosting für Websites ab 1,99€/Monat bei HexaHost.de', + 'packages' => [ + 'starter' => [ + 'name' => 'Webhosting Starter', + 'price' => '1,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Webspace', 'value' => '5 GB'], + ['label' => 'Domains', 'value' => '1'], + ['label' => 'E-Mail-Postfächer', 'value' => '5'], + ['label' => 'Datenbanken', 'value' => '1 MySQL'], + ['label' => 'Traffic', 'value' => '10 GB'], + ], + 'features' => [ + 'cPanel/Webmin', + 'PHP 8.1', + 'SSL-Zertifikat', + 'E-Mail-Postfächer', + 'MySQL Datenbank', + ], + ], + 'business' => [ + 'name' => 'Webhosting Business', + 'price' => '4,99', + 'featured' => true, + 'specs' => [ + ['label' => 'Webspace', 'value' => '20 GB'], + ['label' => 'Domains', 'value' => '5'], + ['label' => 'E-Mail-Postfächer', 'value' => '25'], + ['label' => 'Datenbanken', 'value' => '5 MySQL'], + ['label' => 'Traffic', 'value' => '50 GB'], + ], + 'features' => [ + 'cPanel/Webmin', + 'PHP 8.1', + 'SSL-Zertifikat', + 'E-Mail-Postfächer', + 'MySQL Datenbanken', + 'Backup-Service', + ], + ], + 'professional' => [ + 'name' => 'Webhosting Professional', + 'price' => '9,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Webspace', 'value' => '50 GB'], + ['label' => 'Domains', 'value' => 'Unbegrenzt'], + ['label' => 'E-Mail-Postfächer', 'value' => '100'], + ['label' => 'Datenbanken', 'value' => 'Unbegrenzt'], + ['label' => 'Traffic', 'value' => '200 GB'], + ], + 'features' => [ + 'cPanel/Webmin', + 'PHP 8.1', + 'SSL-Zertifikat', + 'E-Mail-Postfächer', + 'MySQL Datenbanken', + 'Backup-Service', + 'Priority Support', + ], + ], + 'enterprise' => [ + 'name' => 'Webhosting Enterprise', + 'price' => '19,99', + 'featured' => false, + 'specs' => [ + ['label' => 'Webspace', 'value' => '100 GB'], + ['label' => 'Domains', 'value' => 'Unbegrenzt'], + ['label' => 'E-Mail-Postfächer', 'value' => 'Unbegrenzt'], + ['label' => 'Datenbanken', 'value' => 'Unbegrenzt'], + ['label' => 'Traffic', 'value' => '500 GB'], + ], + 'features' => [ + 'cPanel/Webmin', + 'PHP 8.1', + 'SSL-Zertifikat', + 'E-Mail-Postfächer', + 'MySQL Datenbanken', + 'Backup-Service', + 'Priority Support', + 'Individuelle Konfiguration', + ], + ], + ], +]; + +// ============================================================================ +// HILFSFUNKTIONEN +// ============================================================================ + +/** + * Alle Produkte abrufen + */ +function getAllProducts() { + global $PRODUCTS; + return $PRODUCTS; +} + +/** + * Ein Produkt abrufen + */ +function getProduct($productId) { + global $PRODUCTS; + return $PRODUCTS[$productId] ?? null; +} + +/** + * Alle Pakete eines Produkts abrufen + */ +function getProductPackages($productId) { + global $PRODUCTS; + return $PRODUCTS[$productId]['packages'] ?? []; +} + +/** + * Ein bestimmtes Paket abrufen + */ +function getPackage($productId, $packageId) { + global $PRODUCTS; + return $PRODUCTS[$productId]['packages'][$packageId] ?? null; +} + +/** + * Preis eines Pakets abrufen + */ +function getPackagePrice($productId, $packageId) { + $package = getPackage($productId, $packageId); + return $package['price'] ?? null; +} + +/** + * Minimalen Preis eines Produkts abrufen + */ +function getMinPrice($productId) { + global $PRODUCTS; + return $PRODUCTS[$productId]['min_price'] ?? null; +} + +/** + * Preis formatiert ausgeben + */ +function formatPrice($price, $withCurrency = true) { + return $withCurrency ? $price . '€' : $price; +} + +/** + * Generiert HTML für eine Paket-Karte + */ +function renderPackageCard($productId, $packageId, $package) { + $featuredClass = $package['featured'] ? ' featured' : ''; + $featuredBadge = $package['featured'] ? '' : ''; + + $specsHtml = ''; + foreach ($package['specs'] as $spec) { + $specsHtml .= sprintf( + '
%s:%s
', + htmlspecialchars($spec['label']), + htmlspecialchars($spec['value']) + ); + } + + $featuresHtml = ''; + foreach ($package['features'] as $feature) { + $featuresHtml .= sprintf('
✓ %s
', htmlspecialchars($feature)); + } + + return sprintf(' +
+ %s +
+

%s

+
+ %s€ + /Monat +
+
+
+ %s +
+
+ %s +
+ Jetzt bestellen +
', + $featuredClass, + $featuredBadge, + htmlspecialchars($package['name']), + $package['price'], + $specsHtml, + $featuresHtml, + $productId, + $packageId + ); +} + +/** + * Generiert HTML für alle Pakete eines Produkts + */ +function renderAllPackages($productId) { + $packages = getProductPackages($productId); + $html = ''; + foreach ($packages as $packageId => $package) { + $html .= renderPackageCard($productId, $packageId, $package); + } + return $html; +} +?> diff --git a/backend/includes/footer.php b/backend/includes/footer.php new file mode 100644 index 0000000..b00634e --- /dev/null +++ b/backend/includes/footer.php @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/includes/functions.php b/backend/includes/functions.php new file mode 100644 index 0000000..24d736c --- /dev/null +++ b/backend/includes/functions.php @@ -0,0 +1,98 @@ + 'Home', 'url' => 'index.html'], ...] + */ +function generateBreadcrumbs($breadcrumbs) { + echo ''; +} + +/** + * Generate CSRF token for form security + * + * @return string CSRF token + */ +function generateCSRFToken() { + if (!isset($_SESSION['csrf_token'])) { + $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); + } + return $_SESSION['csrf_token']; +} +?> \ No newline at end of file diff --git a/backend/includes/header.php b/backend/includes/header.php new file mode 100644 index 0000000..82629a5 --- /dev/null +++ b/backend/includes/header.php @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + <?php echo isset($page_title) ? htmlspecialchars($page_title) : 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern'; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/demo.html b/demo.html index 317ff1a..d0945cb 100644 --- a/demo.html +++ b/demo.html @@ -148,9 +148,9 @@
-

ℹ️ Über uns

+

ℹ️ Über mich

Unternehmensinformationen aus Niederbayern

- Über uns ansehen + Über mich ansehen
diff --git a/docs/README-OPTIMIZATION.md b/docs/README-OPTIMIZATION.md index f8ec13f..6e2751c 100644 --- a/docs/README-OPTIMIZATION.md +++ b/docs/README-OPTIMIZATION.md @@ -82,7 +82,7 @@ Eine neue `mail-gateway.php`-Datei wurde erstellt mit: ``` public/ ├── index.php (Hauptseite) -├── about.php (Über uns) +├── about.php (Über mich) ├── contact.php (Kontakt) ├── vpc.php (Virtual Private Container) ├── vps.php (Virtual Private Server) diff --git a/docs/README-STRUCTURE.md b/docs/README-STRUCTURE.md index b3100d6..d48d209 100644 --- a/docs/README-STRUCTURE.md +++ b/docs/README-STRUCTURE.md @@ -8,9 +8,9 @@ Die Website wurde umstrukturiert, um Header und Footer in zentralen Dateien zu s ### Zentrale Dateien -- `includes/header.php` - Enthält den HTML-Header mit Navigation -- `includes/footer.php` - Enthält den HTML-Footer mit Links und Copyright -- `includes/functions.php` - Helper-Funktionen für die Website +- `/backend/includes/header.php` - Enthält den HTML-Header mit Navigation +- `/backend/includes/footer.php` - Enthält den HTML-Footer mit Links und Copyright +- `/backend/includes/functions.php` - Helper-Funktionen für die Website ### Konvertierte Seiten @@ -19,7 +19,7 @@ Die Website wurde umstrukturiert, um Header und Footer in zentralen Dateien zu s - `vpc.php` - Virtual Private Container (vorher vpc.html) - `vps.php` - Virtual Private Server (vorher vps.html) - `webhosting.php` - Webhosting (vorher webhosting.html) -- `about.php` - Über uns (vorher about.html) +- `about.php` - Über mich (vorher about.html) ## Verwendung @@ -30,7 +30,7 @@ Die Website wurde umstrukturiert, um Header und Footer in zentralen Dateien zu s ```php
@@ -117,15 +117,15 @@ includeHeader('Seitentitel', 'Beschreibung', 'seitenname'); ## Dateien -- `includes/header.php` - Zentrale Header-Datei -- `includes/footer.php` - Zentrale Footer-Datei -- `includes/functions.php` - Helper-Funktionen +- `/backend/includes/header.php` - Zentrale Header-Datei +- `/backend/includes/footer.php` - Zentrale Footer-Datei +- `/backend/includes/functions.php` - Helper-Funktionen - `index.php` - Startseite (PHP-Version) - `contact.php` - Kontaktseite (PHP-Version) - `vpc.php` - Virtual Private Container (PHP-Version) - `vps.php` - Virtual Private Server (PHP-Version) - `webhosting.php` - Webhosting (PHP-Version) -- `about.php` - Über uns (PHP-Version) +- `about.php` - Über mich (PHP-Version) - `contact.html` - Alte HTML-Version (kann gelöscht werden) - `index.html` - Alte HTML-Version (kann gelöscht werden) - `vpc.html` - Alte HTML-Version (kann gelöscht werden) diff --git a/public/.htaccess b/public/.htaccess index 860efcc..6d78843 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -20,7 +20,7 @@ RewriteEngine On RewriteCond %{HTTPS} off - RewriteCond %{HTTP_HOST} ^(www\.)?hexahost\.de$ [NC] + RewriteCond %{HTTP_HOST} ^(www\.)?(hexahost\.de|dev\.hexahost\.de)$ [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # PHP-Endung aus URLs entfernen diff --git a/public/404.php b/public/404.php index 4d17444..bff4941 100644 --- a/public/404.php +++ b/public/404.php @@ -1,5 +1,5 @@ -
+
diff --git a/public/500.php b/public/500.php index cda8d41..af19018 100644 --- a/public/500.php +++ b/public/500.php @@ -1,5 +1,5 @@ -
+
diff --git a/public/about.php b/public/about.php index 2f5aa77..918e88b 100644 --- a/public/about.php +++ b/public/about.php @@ -1,8 +1,8 @@ -
+
@@ -18,15 +18,15 @@ includeHeader($page_title, $page_description, $current_page); 'Home', 'url' => 'index.php'], - ['title' => 'Über uns', 'url' => ''] + ['title' => 'Über mich', 'url' => ''] ]); ?>

Über HexaHost.de

- Wir sind Ihr zuverlässiger Partner für Hosting-Lösungen aus Niederbayern. - Mit modernster Technologie und persönlichem Service sorgen wir dafür, + Wir sind Ihr zuverlässiger Partner für Hosting- und IT-Lösungen aus Niederbayern. + Mit moderner Technologie und persönlichem Service sorgen wir dafür, dass Ihre Online-Projekte erfolgreich sind.

@@ -40,20 +40,20 @@ includeHeader($page_title, $page_description, $current_page);

Unsere Geschichte

- HexaHost.de wurde mit der Vision gegründet, zuverlässiges und preiswertes - Hosting direkt aus Deutschland anzubieten. Als regionales Unternehmen aus - Niederbayern verstehen wir die Bedürfnisse unserer Kunden und bieten - persönlichen Support in deutscher Sprache. + HexaHost.de wurde von mir, Samuel Müller, mit der Vision gegründet, zuverlässiges + und preiswertes Hosting und IT-Lösungen direkt aus Deutschland anzubieten. Als regionales + Unternehmen aus Niederbayern verstehe ich die Bedürfnisse meiner Kunden + und bieten persönlichen Support.

- Unsere Expertise liegt in der Bereitstellung moderner Hosting-Lösungen + Meine Expertise liegt in der Bereitstellung moderner Hosting- und IT-Lösungen auf Basis von Proxmox-Technologie. Von Virtual Private Containern bis - hin zu klassischem Webhosting - wir haben für jeden Bedarf die passende + hin zu klassischem Webhosting und Mail-Gateways - ich habe für jeden Bedarf die passende Lösung.

- Vertrauen, Zuverlässigkeit und faire Preise sind die Grundpfeiler unseres - Unternehmens. Wir setzen auf transparente Kommunikation und ehrliche + Vertrauen, Zuverlässigkeit und faire Preise sind die Grundpfeiler meines + Unternehmens. Ich setze auf transparente Kommunikation und ehrliche Beratung, damit Sie die beste Lösung für Ihre Anforderungen erhalten.

@@ -66,9 +66,11 @@ includeHeader($page_title, $page_description, $current_page);
-

Standort

-

Niederbayern, Deutschland

-

Regional verwurzelt, global verfügbar

+

Standort (Büro)

+

HexaHost Inh. Samuel Müller

+

Richard-Miller-Straße 1

+

94051 Hauzenberg

+

Deutschland

@@ -80,9 +82,9 @@ includeHeader($page_title, $page_description, $current_page);
-

Unsere Werte

+

Meine Werte

- Das, was uns ausmacht und antreibt + Das, was mich ausmacht und antreibt

@@ -93,7 +95,7 @@ includeHeader($page_title, $page_description, $current_page);

Zuverlässigkeit

-

99.9% Uptime-Garantie und 24/7 Monitoring für maximale Verfügbarkeit Ihrer Services.

+

99% Uptime und 24/7 Monitoring für maximale Verfügbarkeit Ihrer Services.

@@ -111,7 +113,7 @@ includeHeader($page_title, $page_description, $current_page);

Persönlicher Support

-

Direkter Kontakt zu unserem Team aus Niederbayern in deutscher Sprache.

+

Direkter Kontakt zu mir aus Niederbayern, gerne auch bei Ihnen vor Ort in Deutschland.

@@ -126,21 +128,21 @@ includeHeader($page_title, $page_description, $current_page);
- +
@@ -190,7 +193,7 @@ includeHeader($page_title, $page_description, $current_page);

Proxmox VE

-

Enterprise-Grade Virtualisierung mit Proxmox Virtual Environment für maximale Effizienz und Sicherheit.

+

Enterprise-Grade Virtualisierung mit Proxmox VE für maximale Effizienz und Sicherheit.

@@ -199,7 +202,7 @@ includeHeader($page_title, $page_description, $current_page);

NVMe SSD

-

Hochperformante NVMe SSD-Speicher für schnellste Ladezeiten und optimale I/O-Performance.

+

Hochperformante NVMe SSD-Speicher für schnelle Ladezeiten und optimale I/O-Performance.

diff --git a/public/agb.php b/public/agb.php index d82452f..726ea29 100644 --- a/public/agb.php +++ b/public/agb.php @@ -1,5 +1,5 @@ -
+
@@ -45,7 +45,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts

E-Mail

-

Schreiben Sie uns eine E-Mail - wir antworten schnell und kompetent.

+

Schreiben Sie mir eine E-Mail - ich antworte innerhalb von 4 Stunden.

info@hexahost.de
@@ -55,8 +55,8 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts

Telefon

-

Für dringende Anliegen erreichen Sie uns auch telefonisch.

- +49 851 1999 9999 +

Für dringende Anliegen erreichen Sie mich auch telefonisch.

+ +49 15566 175855

Mo-Fr: 9:00-18:00 Uhr

@@ -67,7 +67,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts

Discord

Direkter Support über unseren Discord für schnelle Hilfe.

- +
@@ -77,9 +77,9 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
-

Unser Standort

-

HexaHost.de
Niederbayern
Deutschland

-

Regional verwurzelt

+

Bei Ihnen vor Ort

+

Gerne komme ich zu Ihnen vor Ort um Ihnen persönlich zu helfen.

+

Nur auf Anfrage verfügbar

@@ -92,7 +92,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts

Kontaktformular

- Senden Sie uns eine Nachricht - wir melden uns schnellstmöglich bei Ihnen + Senden Sie mir eine Nachricht - ich melde mich schnellstmöglich bei Ihnen

@@ -134,6 +134,12 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts + + + + + + @@ -175,7 +181,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Wir antworten in der Regel innerhalb von 2-4 Stunden auf E-Mail-Anfragen. Bei dringenden Anliegen nutzen Sie bitte unseren Live Chat oder rufen Sie uns an.

+

Ich antworte in der Regel innerhalb von 2-4 Stunden auf E-Mail-Anfragen. Bei dringenden Anliegen nutzen Sie bitte unseren Live Chat oder rufen Sie mich an.

@@ -184,7 +190,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Ja, unsere Beratung ist völlig kostenfrei und unverbindlich. Wir helfen Ihnen gerne bei der Auswahl der richtigen Hosting-Lösung für Ihre Bedürfnisse.

+

Ja, meine Beratung ist völlig kostenfrei und unverbindlich. Ich helfe Ihnen gerne bei der Auswahl der richtigen Hosting- oder IT-Lösung für Ihre Bedürfnisse.

@@ -193,7 +199,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Selbstverständlich! Wir unterstützen Sie beim Umzug von Ihrem bisherigen Hosting-Anbieter zu uns. Unser Migrations-Service ist in vielen Fällen kostenlos.

+

Selbstverständlich! Ich unterstütze Sie beim Umzug von Ihrem bisherigen Hosting-Anbieter zu mir. Mein Migrations-Service ist in vielen Fällen kostenlos.

@@ -202,7 +208,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Ja, wir bieten eine 30-Tage Geld-zurück-Garantie. Wenn Sie nicht zufrieden sind, erhalten Sie Ihr Geld ohne Wenn und Aber zurück.

+

Ja, ich biete eine 30-Tage Geld-zurück-Garantie. Wenn Sie nicht zufrieden sind, erhalten Sie Ihr Geld ohne Wenn und Aber zurück.

@@ -211,7 +217,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Alle unsere Server stehen in deutschen Rechenzentren. Das gewährleistet DSGVO-Konformität und niedrige Latenzzeiten für deutsche Nutzer.

+

Alle Server stehen in deutschen Rechenzentren. Das gewährleistet DSGVO-Konformität und niedrige Latenzzeiten für deutsche Nutzer.

@@ -220,7 +226,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts +
-

Unser direkter Support ist Mo-Fr von 9:00-18:00 Uhr verfügbar. Außerhalb dieser Zeiten überwachen automatische Systeme die Infrastruktur und bei kritischen Problemen sind wir auch außerhalb der Geschäftszeiten erreichbar.

+

Mein direkter Support ist Mo-Fr von 16:00-21:00 Uhr verfügbar. Außerhalb dieser Zeiten überwachen automatische Systeme die Infrastruktur und bei kritischen Problemen sind wir auch außerhalb dieser Zeiten erreichbar.

@@ -247,7 +253,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts

Schnelle Hilfe garantiert

-

Unser Support-Team ist darauf spezialisiert, Ihnen schnell und effektiv zu helfen. Die meisten Anfragen werden innerhalb von 2 Stunden beantwortet.

+

Mein direkter Support ist darauf spezialisiert, Ihnen schnell und effektiv zu helfen. Die meisten Anfragen werden innerhalb von 2 Stunden beantwortet.

diff --git a/public/datenschutz.php b/public/datenschutz.php index ffdc886..d69959a 100644 --- a/public/datenschutz.php +++ b/public/datenschutz.php @@ -1,5 +1,5 @@ -
+
+ + +
+
+
+

IT-Dienstleistungen für Privat und ergänzend Gewerblich

+

+ Ergänzend zu unseren Hosting-Angeboten unterstützen wir Sie mit persönlicher IT-Betreuung. +

+
+
+
+

IT-Beratung

+

Individuelle Beratung für sinnvolle und wirtschaftliche IT-Entscheidungen.

+
+
+

Support & Fehlerbehebung

+

Schnelle Hilfe bei technischen Problemen - remote oder bei Ihnen vor Ort.

+
+
+

Netzwerk & WLAN-Einrichtung

+

Stabile und sichere Netzwerke für Büro, Homeoffice und Zuhause.

+
+
+

IT-Sicherheit & Backup

+

Schutzkonzepte und Backup-Strategien für Ihre Daten und Systeme.

+
+
+

Webseiten- & Hosting-Service

+

Technische Betreuung Ihrer Webpräsenz von Einrichtung bis Optimierung.

+
+
+

Wartung & Betreuung

+

Regelmäßige Pflege und verlässliche Unterstützung im laufenden Betrieb.

+
+
+
@@ -165,16 +224,16 @@ includeHeader($page_title, $page_description, $current_page);

Performance

-

Modernste Hardware und optimierte Konfigurationen für beste Leistung

+

Moderne Hardware und optimierte Konfigurationen für beste Leistung

- +
-

Faire Preise

-

Transparent kalkulierte Preise ohne versteckte Kosten

+

Maximale Sicherheit

+

DDoS-Schutz, SSL-Zertifikate und regelmäßige Backups inklusive

@@ -183,7 +242,7 @@ includeHeader($page_title, $page_description, $current_page);

Support aus Bayern

-

Persönlicher Support direkt aus Niederbayern in deutscher Sprache

+

Persönlicher Support direkt aus Niederbayern

@@ -196,8 +255,9 @@ includeHeader($page_title, $page_description, $current_page);

Bereit für zuverlässiges Hosting?

Starten Sie noch heute mit HexaHost und erleben Sie den Unterschied

diff --git a/public/it-dienstleistungen.php b/public/it-dienstleistungen.php new file mode 100644 index 0000000..7cd8237 --- /dev/null +++ b/public/it-dienstleistungen.php @@ -0,0 +1,148 @@ + + +
+ +
+
+
+ 'Home', 'url' => 'index.php'], + ['title' => 'IT-Dienstleistungen', 'url' => ''] + ]); + ?> +

+ IT-Dienstleistungen mit Fokus auf Privatkunden +

+

+ Sie erhalten persönliche IT-Unterstützung aus einer Hand: von der Beratung bis zur laufenden Betreuung. + Der Schwerpunkt liegt auf privaten IT-Anliegen, gewerbliche Unterstützung bieten wir ergänzend an. +

+
+
+
+ + +
+
+
+

Für wen sind die Leistungen geeignet?

+

+ Maßgeschneiderte IT-Unterstützung mit klarem Schwerpunkt auf Privatkunden +

+
+
+
+

Privat

+

+ Für Privatpersonen und Familien, die schnelle Hilfe bei IT-Problemen, sichere Heimnetzwerke + und verständliche Unterstützung im Alltag wünschen. +

+
+
+

Gewerblich (sekundär)

+

+ Für Unternehmen, Selbstständige und Teams, die ergänzend eine zuverlässige IT-Basis benötigen: + strukturierte Beratung, stabile Systeme und planbare Betreuung. +

+
+
+
+
+ + +
+
+
+

Unsere IT-Dienstleistungen im Überblick

+

+ Keine Pauschalpreise: Sie erhalten ein individuelles Angebot passend zu Ihrem Bedarf. +

+
+
+
+

IT-Beratung

+

Strategische und praxisnahe Beratung für Ihre IT-Entscheidungen.

+
    +
  • Ist-Analyse und Zieldefinition
  • +
  • Empfehlungen für Hard- und Software
  • +
  • Roadmap für sichere Umsetzung
  • +
+
+
+

Support & Fehlerbehebung

+

Schnelle Hilfe bei technischen Problemen - remote oder bei Ihnen vor Ort.

+
    +
  • Akute Störungen beheben
  • +
  • Systeme stabilisieren
  • +
  • Nachhaltige Lösungsansätze
  • +
+
+
+

Netzwerk & WLAN-Einrichtung

+

Leistungsfähige und sichere Netzwerkstrukturen für Büro oder Zuhause.

+
    +
  • Router-, Switch- und WLAN-Setup
  • +
  • Optimierung von Reichweite und Performance
  • +
  • Segmentierung und Zugriffsregeln
  • +
+
+
+

IT-Sicherheit & Backup

+

Schutz Ihrer Daten durch sinnvolle Sicherheits- und Backup-Konzepte.

+
    +
  • Sicherheitsprüfung bestehender Systeme
  • +
  • Backup-Strategie mit Wiederherstellungstest
  • +
  • Absicherung von Endgeräten und Zugriffen
  • +
+
+
+

Webseiten- & Hosting-Service

+

Unterstützung rund um Betrieb, Pflege und Optimierung Ihrer Webpräsenz.

+
    +
  • Einrichtung und Migration
  • +
  • Technische Wartung und Updates
  • +
  • Performance- und Sicherheitsoptimierung
  • +
+
+
+

Wartung & Betreuung

+

Kontinuierliche IT-Begleitung für stabile Systeme und weniger Ausfälle.

+
    +
  • Regelmäßige Systempflege
  • +
  • Proaktive Überprüfung kritischer Punkte
  • +
  • Planbare Unterstützung im Alltag
  • +
+
+
+
+
+ + +
+
+
+

Sie möchten Ihre IT professionell aufstellen?

+

Stellen Sie jetzt eine unverbindliche Anfrage - ich melde mich zeitnah bei Ihnen.

+ +
+
+
+
+ + diff --git a/public/mail-gateway.php b/public/mail-gateway.php index 3fafd33..b0fd0f2 100644 --- a/public/mail-gateway.php +++ b/public/mail-gateway.php @@ -1,16 +1,21 @@ -
+
@@ -18,37 +23,36 @@ includeHeader($page_title, $page_description, $current_page); 'Home', 'url' => 'index.php'], - ['title' => 'Mail Gateway', 'url' => ''] + ['title' => 'Proxmox Mail Gateway', 'url' => ''] ]); ?>

- Mail Gateway - für Unternehmen + +

- Professionelle E-Mail-Infrastruktur mit maximalem Schutz vor Spam und Malware. - Sichern Sie Ihre geschäftliche Kommunikation mit unseren Mail Gateway Lösungen. +

- Spam & Virus Schutz + Spam- und Virenschutz
- E-Mail Archivierung + Quarantäne-Management
- DSGVO-konform + Tracking Center & Reporting
@@ -59,170 +63,13 @@ includeHeader($page_title, $page_description, $current_page);
-

Mail Gateway Pakete

+

- Wählen Sie das passende Mail Gateway Paket für Ihr Unternehmen +

- -
-
-

Mail Starter

-
- 4,99€ - /Monat -
-
-
-
- Postfächer: - 5 -
-
- Speicher/Postfach: - 5 GB -
-
- Domains: - 1 -
-
- E-Mails/Tag: - 500 -
-
-
-
✓ Spam-Filter
-
✓ Virus-Schutz
-
✓ Webmail
-
✓ IMAP/POP3
-
✓ SSL/TLS Verschlüsselung
-
- Jetzt bestellen -
- - - - - -
-
-

Mail Professional

-
- 29,99€ - /Monat -
-
-
-
- Postfächer: - 100 -
-
- Speicher/Postfach: - 25 GB -
-
- Domains: - 10 -
-
- E-Mails/Tag: - 10.000 -
-
-
-
✓ Spam-Filter (KI-gestützt)
-
✓ Virus-Schutz
-
✓ Webmail
-
✓ IMAP/POP3
-
✓ SSL/TLS Verschlüsselung
-
✓ E-Mail Archivierung (1 Jahr)
-
✓ Kalender & Kontakte
-
✓ ActiveSync für Mobile
-
- Jetzt bestellen -
- - -
-
-

Mail Enterprise

-
- 59,99€ - /Monat -
-
-
-
- Postfächer: - Unbegrenzt -
-
- Speicher/Postfach: - 50 GB -
-
- Domains: - Unbegrenzt -
-
- E-Mails/Tag: - Unbegrenzt -
-
-
-
✓ Spam-Filter (KI-gestützt)
-
✓ Virus-Schutz
-
✓ Webmail
-
✓ IMAP/POP3
-
✓ SSL/TLS Verschlüsselung
-
✓ E-Mail Archivierung (10 Jahre)
-
✓ Kalender & Kontakte
-
✓ ActiveSync für Mobile
-
✓ Dedizierte IP
-
✓ Priority Support
-
- Jetzt bestellen -
+
@@ -243,8 +90,8 @@ includeHeader($page_title, $page_description, $current_page); -

Spam-Schutz

-

Mehrstufiger Spam-Filter mit KI-gestützter Erkennung filtert über 99% aller unerwünschten E-Mails zuverlässig heraus.

+

Mehrstufiger Spam-Filter

+

Kombinierte Filtermechanismen reduzieren unerwünschte E-Mails effektiv und schützen Ihre Mailserver zuverlässig.

@@ -253,8 +100,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Virus-Schutz

-

Echtzeit-Virenscanner prüft alle eingehenden und ausgehenden E-Mails auf Schadsoftware und blockiert gefährliche Anhänge.

+

Integrierter Virenschutz

+

Eingehende und ausgehende Nachrichten werden auf Schadsoftware geprüft, bevor sie Ihr internes Mailsystem erreichen.

@@ -263,8 +110,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Verschlüsselung

-

TLS-Verschlüsselung für sichere Übertragung. Optional S/MIME und PGP für Ende-zu-Ende-verschlüsselte Kommunikation.

+

SMTP-Relay und Regelwerk

+

Flexible Transportrichtlinien, Whitelist/Blacklist und Domain-Regeln geben Ihnen volle Kontrolle über den Mailfluss.

@@ -275,8 +122,8 @@ includeHeader($page_title, $page_description, $current_page);
-

E-Mail Archivierung

-

DSGVO-konforme Archivierung aller E-Mails. Revisionssichere Aufbewahrung für rechtliche Anforderungen.

+

Quarantäne und Tracking Center

+

Nachvollziehbare Zustellhistorie und komfortables Quarantäne-Management für Administratoren und Endanwender.

@@ -316,8 +163,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Bereit für professionelle E-Mail-Kommunikation?

-

Starten Sie noch heute mit unserem Mail Gateway

+

+

Jetzt bestellen Beratung anfordern diff --git a/public/vpc.php b/public/vpc.php index 7f4d7a3..bc24083 100644 --- a/public/vpc.php +++ b/public/vpc.php @@ -1,16 +1,21 @@ -
+
@@ -22,13 +27,11 @@ includeHeader($page_title, $page_description, $current_page); ]); ?>

- Virtual Private Container - auf Proxmox LXC + +

- Erleben Sie die Effizienz von Linux-Containern mit der Zuverlässigkeit - von Proxmox. Unsere VPC-Lösungen bieten optimale Performance bei - minimalem Ressourcenverbrauch. +

@@ -59,182 +62,13 @@ includeHeader($page_title, $page_description, $current_page);
-

VPC Pakete

+

- Wählen Sie das perfekte Container-Paket für Ihre Anforderungen +

- -
-
-

VPC Starter

-
- 4,99€ - /Monat -
-
-
-
- CPU Kerne: - 1 vCore -
-
- RAM: - 1 GB -
-
- SSD Speicher: - 20 GB -
-
- Traffic: - 1 TB -
-
- IPv4 Adressen: - 1 -
-
-
-
✓ Proxmox LXC Container
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Backup inklusive
-
✓ 24/7 Monitoring
-
- Jetzt bestellen -
- - - - - -
-
-

VPC Professional

-
- 19,99€ - /Monat -
-
-
-
- CPU Kerne: - 4 vCores -
-
- RAM: - 8 GB -
-
- SSD Speicher: - 160 GB -
-
- Traffic: - 5 TB -
-
- IPv4 Adressen: - 2 -
-
-
-
✓ Proxmox LXC Container
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Stündliches Backup
-
✓ 24/7 Monitoring
-
✓ Snapshot-Funktion
-
✓ Priority Support
-
- Jetzt bestellen -
- - -
-
-

VPC Enterprise

-
- 39,99€ - /Monat -
-
-
-
- CPU Kerne: - 8 vCores -
-
- RAM: - 16 GB -
-
- SSD Speicher: - 320 GB -
-
- Traffic: - 10 TB -
-
- IPv4 Adressen: - 3 -
-
-
-
✓ Proxmox LXC Container
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Stündliches Backup
-
✓ 24/7 Monitoring
-
✓ Snapshot-Funktion
-
✓ Priority Support
-
✓ Individuelle Konfiguration
-
- Jetzt bestellen -
+
@@ -329,8 +163,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Bereit für Ihren VPC?

-

Starten Sie noch heute mit einem Virtual Private Container

+

+

Jetzt bestellen Beratung anfordern @@ -343,4 +177,4 @@ includeHeader($page_title, $page_description, $current_page); \ No newline at end of file +?> diff --git a/public/vps.php b/public/vps.php index 2b061ec..8e2fd5a 100644 --- a/public/vps.php +++ b/public/vps.php @@ -1,16 +1,21 @@ -
+
@@ -22,12 +27,11 @@ includeHeader($page_title, $page_description, $current_page); ]); ?>

- Virtual Private Server - auf Proxmox KVM + +

- Maximale Flexibilität und Kontrolle mit vollwertiger KVM-Virtualisierung. - Installieren Sie jedes Betriebssystem und genießen Sie vollständigen Root-Zugriff. +

@@ -63,182 +67,13 @@ includeHeader($page_title, $page_description, $current_page);
-

VPS Pakete

+

- Wählen Sie das perfekte VPS-Paket für Ihre Anforderungen +

- -
-
-

VPS Starter

-
- 9,99€ - /Monat -
-
-
-
- CPU Kerne: - 1 vCore -
-
- RAM: - 2 GB -
-
- SSD Speicher: - 40 GB -
-
- Traffic: - 2 TB -
-
- IPv4 Adressen: - 1 -
-
-
-
✓ Proxmox KVM Virtualisierung
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Backup inklusive
-
✓ 24/7 Monitoring
-
- Jetzt bestellen -
- - - - - -
-
-

VPS Professional

-
- 39,99€ - /Monat -
-
-
-
- CPU Kerne: - 4 vCores -
-
- RAM: - 8 GB -
-
- SSD Speicher: - 160 GB -
-
- Traffic: - 8 TB -
-
- IPv4 Adressen: - 2 -
-
-
-
✓ Proxmox KVM Virtualisierung
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Stündliches Backup
-
✓ 24/7 Monitoring
-
✓ Snapshot-Funktion
-
✓ Priority Support
-
- Jetzt bestellen -
- - -
-
-

VPS Enterprise

-
- 79,99€ - /Monat -
-
-
-
- CPU Kerne: - 8 vCores -
-
- RAM: - 16 GB -
-
- SSD Speicher: - 320 GB -
-
- Traffic: - 15 TB -
-
- IPv4 Adressen: - 3 -
-
-
-
✓ Proxmox KVM Virtualisierung
-
✓ Root-Zugriff
-
✓ SSH-Zugang
-
✓ Stündliches Backup
-
✓ 24/7 Monitoring
-
✓ Snapshot-Funktion
-
✓ Priority Support
-
✓ Individuelle Konfiguration
-
- Jetzt bestellen -
+
@@ -333,8 +168,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Bereit für Ihren VPS?

-

Starten Sie noch heute mit einem Virtual Private Server

+

+

Jetzt bestellen Beratung anfordern @@ -347,4 +182,4 @@ includeHeader($page_title, $page_description, $current_page); \ No newline at end of file +?> diff --git a/public/webhosting.php b/public/webhosting.php index 143321f..86c2bc7 100644 --- a/public/webhosting.php +++ b/public/webhosting.php @@ -1,16 +1,21 @@ -
+
@@ -22,12 +27,11 @@ includeHeader($page_title, $page_description, $current_page); ]); ?>

- Webhosting - Alles für Ihre Website + +

- Klassisches Webhosting mit allem, was Sie für eine erfolgreiche Website benötigen. - PHP, MySQL, SSL-Zertifikate und E-Mail-Postfächer - alles inklusive. +

@@ -60,182 +64,13 @@ includeHeader($page_title, $page_description, $current_page);
-

Webhosting Pakete

+

- Von der ersten Website bis zum professionellen Online-Shop +

- -
-
-

Webhosting Starter

-
- 1,99€ - /Monat -
-
-
-
- Webspace: - 5 GB -
-
- Domains: - 1 -
-
- E-Mail-Postfächer: - 5 -
-
- Datenbanken: - 1 MySQL -
-
- Traffic: - 10 GB -
-
-
-
✓ cPanel/Webmin
-
✓ PHP 8.1
-
✓ SSL-Zertifikat
-
✓ E-Mail-Postfächer
-
✓ MySQL Datenbank
-
- Jetzt bestellen -
- - - - - -
-
-

Webhosting Professional

-
- 9,99€ - /Monat -
-
-
-
- Webspace: - 50 GB -
-
- Domains: - Unbegrenzt -
-
- E-Mail-Postfächer: - 100 -
-
- Datenbanken: - Unbegrenzt -
-
- Traffic: - 200 GB -
-
-
-
✓ cPanel/Webmin
-
✓ PHP 8.1
-
✓ SSL-Zertifikat
-
✓ E-Mail-Postfächer
-
✓ MySQL Datenbanken
-
✓ Backup-Service
-
✓ Priority Support
-
- Jetzt bestellen -
- - -
-
-

Webhosting Enterprise

-
- 19,99€ - /Monat -
-
-
-
- Webspace: - 100 GB -
-
- Domains: - Unbegrenzt -
-
- E-Mail-Postfächer: - Unbegrenzt -
-
- Datenbanken: - Unbegrenzt -
-
- Traffic: - 500 GB -
-
-
-
✓ cPanel/Webmin
-
✓ PHP 8.1
-
✓ SSL-Zertifikat
-
✓ E-Mail-Postfächer
-
✓ MySQL Datenbanken
-
✓ Backup-Service
-
✓ Priority Support
-
✓ Individuelle Konfiguration
-
- Jetzt bestellen -
+
@@ -332,8 +167,8 @@ includeHeader($page_title, $page_description, $current_page);
-

Bereit für Ihr Webhosting?

-

Starten Sie noch heute mit professionellem Webhosting

+

+

Jetzt bestellen Beratung anfordern @@ -346,4 +181,4 @@ includeHeader($page_title, $page_description, $current_page); \ No newline at end of file +?> diff --git a/public/widerruf.php b/public/widerruf.php new file mode 100644 index 0000000..cba182a --- /dev/null +++ b/public/widerruf.php @@ -0,0 +1,136 @@ + + +
+ + + +
+ +