Merge branch 'main' into develop
This commit is contained in:
31
CONTRIBUTING.md
Normal file
31
CONTRIBUTING.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
## Commit Message Standard
|
||||||
|
|
||||||
|
Bitte nutze fuer alle Commits dieses Format:
|
||||||
|
|
||||||
|
`<type>: <kurze beschreibung>`
|
||||||
|
|
||||||
|
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): ...`.
|
||||||
67
LICENSE
Normal file
67
LICENSE
Normal file
@@ -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
|
||||||
21
README.md
21
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Eine moderne und umfangreiche Website für das Hosting-Unternehmen HexaHost.de aus Niederbayern.
|
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
|
## 🚀 Features
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ HexaHost-Frontend/
|
|||||||
│ ├── vps.php # Virtual Private Server
|
│ ├── vps.php # Virtual Private Server
|
||||||
│ ├── mail-gateway.php # Mail Gateway
|
│ ├── mail-gateway.php # Mail Gateway
|
||||||
│ ├── webhosting.php # Webhosting
|
│ ├── webhosting.php # Webhosting
|
||||||
│ ├── about.php # Über uns
|
│ ├── about.php # Über mich
|
||||||
│ ├── contact.php # Kontaktseite
|
│ ├── contact.php # Kontaktseite
|
||||||
│ ├── contact-handler.php # Kontaktformular-Backend
|
│ ├── contact-handler.php # Kontaktformular-Backend
|
||||||
│ ├── impressum.php # Impressum
|
│ ├── impressum.php # Impressum
|
||||||
@@ -273,22 +273,7 @@ Paket-Cards in den entsprechenden Produktseiten duplizieren und anpassen.
|
|||||||
|
|
||||||
## 📄 Lizenz
|
## 📄 Lizenz
|
||||||
|
|
||||||
Dieses Projekt ist unter der **Business Source License 1.1 (BSL)** lizenziert.
|
Alle Rechte vorbehalten HexaHost.de
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
## 🤝 Beitragen
|
## 🤝 Beitragen
|
||||||
|
|
||||||
|
|||||||
161
backend/api/dns-lookup.php
Normal file
161
backend/api/dns-lookup.php
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - DNS Lookup API
|
||||||
|
*
|
||||||
|
* Führt echte DNS-Abfragen durch und gibt die Ergebnisse als JSON zurück.
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/dns-lookup.php?domain=example.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// CORS Headers für Frontend-Zugriff
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
// Preflight request handling
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nur GET-Anfragen erlauben
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
|
||||||
|
http_response_code(405);
|
||||||
|
echo json_encode(['error' => '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));
|
||||||
|
}
|
||||||
175
backend/api/dns-propagation.php
Normal file
175
backend/api/dns-propagation.php
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - DNS Propagation Check API
|
||||||
|
*
|
||||||
|
* Prüft DNS-Records bei verschiedenen öffentlichen DNS-Servern
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/dns-propagation.php?domain=example.com&type=A
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Öffentliche DNS-Server für Propagation-Check
|
||||||
|
$dnsServers = [
|
||||||
|
['name' => '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)
|
||||||
|
];
|
||||||
|
}
|
||||||
179
backend/api/ping-check.php
Normal file
179
backend/api/ping-check.php
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - Ping/Verfügbarkeitstest API
|
||||||
|
*
|
||||||
|
* Prüft die Erreichbarkeit einer Domain
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/ping-check.php?domain=example.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$domain = isset($_GET['domain']) ? trim($_GET['domain']) : '';
|
||||||
|
|
||||||
|
if (empty($domain)) {
|
||||||
|
http_response_code(400);
|
||||||
|
echo json_encode(['error' => '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;
|
||||||
|
}
|
||||||
209
backend/api/reverse-dns.php
Normal file
209
backend/api/reverse-dns.php
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - Reverse DNS Lookup API
|
||||||
|
*
|
||||||
|
* Löst eine IP-Adresse zu einem Hostnamen auf
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/reverse-dns.php?ip=8.8.8.8
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ip = isset($_GET['ip']) ? trim($_GET['ip']) : '';
|
||||||
|
|
||||||
|
if (empty($ip)) {
|
||||||
|
http_response_code(400);
|
||||||
|
echo json_encode(['error' => '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;
|
||||||
|
}
|
||||||
164
backend/api/ssl-check.php
Normal file
164
backend/api/ssl-check.php
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - SSL Certificate Check API
|
||||||
|
*
|
||||||
|
* Prüft SSL-Zertifikat-Informationen einer Domain
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/ssl-check.php?domain=example.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$domain = isset($_GET['domain']) ? trim($_GET['domain']) : '';
|
||||||
|
|
||||||
|
if (empty($domain)) {
|
||||||
|
http_response_code(400);
|
||||||
|
echo json_encode(['error' => '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;
|
||||||
|
}
|
||||||
365
backend/api/whois-lookup.php
Normal file
365
backend/api/whois-lookup.php
Normal file
@@ -0,0 +1,365 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaDNS - WHOIS Lookup API
|
||||||
|
*
|
||||||
|
* Ruft WHOIS-Informationen für eine Domain ab
|
||||||
|
*
|
||||||
|
* Verwendung: GET /api/whois-lookup.php?domain=example.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
||||||
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
|
http_response_code(200);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$domain = isset($_GET['domain']) ? trim($_GET['domain']) : '';
|
||||||
|
|
||||||
|
if (empty($domain)) {
|
||||||
|
http_response_code(400);
|
||||||
|
echo json_encode(['error' => '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;
|
||||||
|
}
|
||||||
17
backend/config/config.php
Normal file
17
backend/config/config.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaHost.de Konfiguration
|
||||||
|
*
|
||||||
|
* HINWEIS: Diese Datei ist veraltet!
|
||||||
|
*
|
||||||
|
* Die Konfiguration wurde nach mail-config.php verschoben.
|
||||||
|
* Bitte verwenden Sie stattdessen:
|
||||||
|
*
|
||||||
|
* require_once 'config/mail-config.php';
|
||||||
|
*
|
||||||
|
* Diese Datei wird nur aus Kompatibilitätsgründen beibehalten.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Lade die neue Konfiguration
|
||||||
|
require_once __DIR__ . '/mail-config.php';
|
||||||
|
?>
|
||||||
198
backend/config/mail-config.php
Normal file
198
backend/config/mail-config.php
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaHost.de Mail Configuration
|
||||||
|
*
|
||||||
|
* Bitte passen Sie die folgenden SMTP-Einstellungen an Ihre E-Mail-Provider an.
|
||||||
|
*
|
||||||
|
* Beispiele für gängige Provider:
|
||||||
|
*
|
||||||
|
* Gmail:
|
||||||
|
* - SMTP_HOST = 'smtp.gmail.com'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
* - SMTP_USERNAME = 'ihre-email@gmail.com'
|
||||||
|
* - SMTP_PASSWORD = 'ihr-app-passwort'
|
||||||
|
*
|
||||||
|
* Outlook/Hotmail:
|
||||||
|
* - SMTP_HOST = 'smtp-mail.outlook.com'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*
|
||||||
|
* GMX:
|
||||||
|
* - SMTP_HOST = 'mail.gmx.net'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*
|
||||||
|
* Web.de:
|
||||||
|
* - SMTP_HOST = 'smtp.web.de'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*
|
||||||
|
* 1&1:
|
||||||
|
* - SMTP_HOST = 'smtp.1und1.de'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*
|
||||||
|
* Strato:
|
||||||
|
* - SMTP_HOST = 'smtp.strato.de'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*
|
||||||
|
* Ionos:
|
||||||
|
* - SMTP_HOST = 'smtp.ionos.de'
|
||||||
|
* - SMTP_PORT = 587
|
||||||
|
*/
|
||||||
|
|
||||||
|
// SMTP Server Einstellungen
|
||||||
|
define('SMTP_HOST', 'smtp.ihre-domain.de'); // Ihr SMTP-Server
|
||||||
|
define('SMTP_PORT', 587); // SMTP-Port (meist 587 oder 465)
|
||||||
|
define('SMTP_USERNAME', 'kontakt@ihre-domain.de'); // Ihr SMTP-Benutzername
|
||||||
|
define('SMTP_PASSWORD', 'ihr-smtp-passwort'); // Ihr SMTP-Passwort
|
||||||
|
|
||||||
|
// E-Mail Adressen
|
||||||
|
define('SMTP_FROM_EMAIL', 'kontakt@hexahost.de'); // Absender-E-Mail (muss zu SMTP_USERNAME passen)
|
||||||
|
define('SMTP_TO_EMAIL', 'info@hexahost.de'); // Empfänger-E-Mail für Kontaktformular
|
||||||
|
|
||||||
|
// Sicherheitseinstellungen
|
||||||
|
define('ENABLE_CSRF_PROTECTION', true); // CSRF-Schutz aktivieren
|
||||||
|
define('ENABLE_RATE_LIMITING', true); // Rate-Limiting aktivieren
|
||||||
|
define('MAX_REQUESTS_PER_HOUR', 10); // Max. Anfragen pro Stunde
|
||||||
|
|
||||||
|
// Spam-Schutz Einstellungen
|
||||||
|
define('ENABLE_SPAM_PROTECTION', true); // Spam-Schutz aktivieren
|
||||||
|
define('MAX_MESSAGE_LENGTH', 5000); // Max. Nachrichtenlänge
|
||||||
|
define('MIN_MESSAGE_LENGTH', 10); // Min. Nachrichtenlänge
|
||||||
|
|
||||||
|
// Debug-Einstellungen (nur für Entwicklung)
|
||||||
|
define('DEBUG_MODE', false); // Debug-Modus (true/false)
|
||||||
|
define('LOG_EMAILS', true); // E-Mails loggen (true/false)
|
||||||
|
|
||||||
|
// Zusätzliche Sicherheitsheader
|
||||||
|
define('ADDITIONAL_HEADERS', [
|
||||||
|
'X-Mailer' => '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' => '<mailto:unsubscribe@hexahost.de>',
|
||||||
|
'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;
|
||||||
|
}
|
||||||
|
?>
|
||||||
541
backend/config/products-config.php
Normal file
541
backend/config/products-config.php
Normal file
@@ -0,0 +1,541 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* HexaHost.de Produkt-Konfiguration
|
||||||
|
*
|
||||||
|
* Hier können Sie alle Preise und Produktinformationen zentral verwalten.
|
||||||
|
* Nach Änderungen: npm run build && npm run deploy
|
||||||
|
*
|
||||||
|
* Verwendung in PHP-Seiten:
|
||||||
|
* require_once 'config/products-config.php';
|
||||||
|
* $packages = getProductPackages('vpc');
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// VIRTUAL PRIVATE CONTAINER (VPC)
|
||||||
|
// ============================================================================
|
||||||
|
$PRODUCTS['vpc'] = [
|
||||||
|
'name' => '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'] ? '<div class="featured-badge">Beliebt</div>' : '';
|
||||||
|
|
||||||
|
$specsHtml = '';
|
||||||
|
foreach ($package['specs'] as $spec) {
|
||||||
|
$specsHtml .= sprintf(
|
||||||
|
'<div class="spec-item"><span class="spec-label">%s:</span><span class="spec-value">%s</span></div>',
|
||||||
|
htmlspecialchars($spec['label']),
|
||||||
|
htmlspecialchars($spec['value'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$featuresHtml = '';
|
||||||
|
foreach ($package['features'] as $feature) {
|
||||||
|
$featuresHtml .= sprintf('<div class="feature">✓ %s</div>', htmlspecialchars($feature));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('
|
||||||
|
<div class="package-card glass-card%s">
|
||||||
|
%s
|
||||||
|
<div class="package-header">
|
||||||
|
<h3 class="package-name">%s</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<span class="price">%s€</span>
|
||||||
|
<span class="period">/Monat</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="package-specs">
|
||||||
|
%s
|
||||||
|
</div>
|
||||||
|
<div class="package-features">
|
||||||
|
%s
|
||||||
|
</div>
|
||||||
|
<a href="contact.php?package=%s-%s" class="btn btn-primary">Jetzt bestellen</a>
|
||||||
|
</div>',
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
?>
|
||||||
167
backend/includes/footer.php
Normal file
167
backend/includes/footer.php
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
<footer class="footer">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-content">
|
||||||
|
<div class="footer-section">
|
||||||
|
<h4>HexaHost.de</h4>
|
||||||
|
<p>Zuverlässiges Hosting aus Niederbayern</p>
|
||||||
|
<div class="footer-location">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/>
|
||||||
|
<circle cx="12" cy="10" r="3"/>
|
||||||
|
</svg>
|
||||||
|
<span>Niederbayern, Deutschland</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-section">
|
||||||
|
<h4>Produkte</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/vpc">Virtual Private Container</a></li>
|
||||||
|
<li><a href="/vps">Virtual Private Server</a></li>
|
||||||
|
<li><a href="/mail-gateway">Mail Gateway</a></li>
|
||||||
|
<li><a href="/webhosting">Webhosting</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-section">
|
||||||
|
<h4>Unternehmen</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/about">Über mich</a></li>
|
||||||
|
<li><a href="/contact">Kontakt</a></li>
|
||||||
|
<li><a href="/impressum">Impressum</a></li>
|
||||||
|
<li><a href="/datenschutz">Datenschutz</a></li>
|
||||||
|
<li><a href="/agb">AGB</a></li>
|
||||||
|
<li><a href="/widerruf">Widerrufsbelehrung</a></li>
|
||||||
|
<li><a href="#" id="openCookieSettings" onclick="CookieConsent.resetConsent(); return false;">Cookie-Einstellungen</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="footer-section">
|
||||||
|
<h4>Support</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://shop.hexahost.de/clientarea.php">Kunden-Center</a></li>
|
||||||
|
<li><a href="https://shop.hexahost.de/serverstatus.php">Status</a></li>
|
||||||
|
<li><a href="https://shop.hexahost.de/supporttickets.php">Support-Ticket</a></li>
|
||||||
|
<li><a href="#">FAQ</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer-bottom">
|
||||||
|
<p>© <?php echo date('Y'); ?> HexaHost.de - Alle Rechte vorbehalten</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Cookie Consent Banner -->
|
||||||
|
<div id="cookieConsent" class="cookie-consent" role="dialog" aria-labelledby="cookieConsentTitle" aria-describedby="cookieConsentDesc">
|
||||||
|
<div class="cookie-consent-container">
|
||||||
|
<div class="cookie-consent-content">
|
||||||
|
<div class="cookie-consent-icon">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<circle cx="12" cy="12" r="10"/>
|
||||||
|
<circle cx="8" cy="9" r="1" fill="currentColor"/>
|
||||||
|
<circle cx="15" cy="8" r="1" fill="currentColor"/>
|
||||||
|
<circle cx="10" cy="14" r="1" fill="currentColor"/>
|
||||||
|
<circle cx="16" cy="13" r="1" fill="currentColor"/>
|
||||||
|
<circle cx="13" cy="17" r="1" fill="currentColor"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="cookie-consent-text">
|
||||||
|
<h3 id="cookieConsentTitle">Cookie-Einstellungen</h3>
|
||||||
|
<p id="cookieConsentDesc">
|
||||||
|
Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung auf unserer Website zu bieten.
|
||||||
|
Technisch notwendige Cookies sind für die Funktionalität erforderlich.
|
||||||
|
<a href="/datenschutz">Mehr erfahren</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="cookie-consent-actions">
|
||||||
|
<button type="button" id="cookieAcceptAll" class="btn btn-primary">Alle akzeptieren</button>
|
||||||
|
<button type="button" id="cookieAcceptEssential" class="btn btn-secondary">Nur notwendige</button>
|
||||||
|
<button type="button" id="cookieSettings" class="btn btn-text">Einstellungen</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Erweiterte Cookie-Einstellungen (standardmäßig versteckt) -->
|
||||||
|
<div id="cookieSettingsPanel" class="cookie-settings-panel" style="display: none;">
|
||||||
|
<div class="cookie-settings-content">
|
||||||
|
<h4>Cookie-Einstellungen</h4>
|
||||||
|
<div class="cookie-option">
|
||||||
|
<div class="cookie-option-info">
|
||||||
|
<strong>Notwendige Cookies</strong>
|
||||||
|
<p>Diese Cookies sind für die Grundfunktionen der Website erforderlich.</p>
|
||||||
|
</div>
|
||||||
|
<label class="cookie-toggle disabled">
|
||||||
|
<input type="checkbox" checked disabled>
|
||||||
|
<span class="cookie-toggle-slider"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="cookie-option">
|
||||||
|
<div class="cookie-option-info">
|
||||||
|
<strong>Analyse-Cookies</strong>
|
||||||
|
<p>Helfen uns zu verstehen, wie Besucher unsere Website nutzen.</p>
|
||||||
|
</div>
|
||||||
|
<label class="cookie-toggle">
|
||||||
|
<input type="checkbox" id="cookieAnalytics">
|
||||||
|
<span class="cookie-toggle-slider"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="cookie-option">
|
||||||
|
<div class="cookie-option-info">
|
||||||
|
<strong>Marketing-Cookies</strong>
|
||||||
|
<p>Werden verwendet, um relevante Werbung anzuzeigen.</p>
|
||||||
|
</div>
|
||||||
|
<label class="cookie-toggle">
|
||||||
|
<input type="checkbox" id="cookieMarketing">
|
||||||
|
<span class="cookie-toggle-slider"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="cookie-settings-actions">
|
||||||
|
<button type="button" id="cookieSaveSettings" class="btn btn-primary">Einstellungen speichern</button>
|
||||||
|
<button type="button" id="cookieCloseSettings" class="btn btn-secondary">Abbrechen</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Google Analytics (GA4) mit Consent Mode -->
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
|
||||||
|
// Standard: keine Analyse/Marketing-Cookies bis zur Einwilligung
|
||||||
|
gtag('consent', 'default', {
|
||||||
|
analytics_storage: 'denied',
|
||||||
|
ad_storage: 'denied',
|
||||||
|
ad_user_data: 'denied',
|
||||||
|
ad_personalization: 'denied'
|
||||||
|
});
|
||||||
|
|
||||||
|
gtag('js', new Date());
|
||||||
|
gtag('config', 'G-EF0E9VPMTD', {
|
||||||
|
anonymize_ip: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Übergibt Consent-Änderungen aus dem eigenen Cookie-Banner an GA
|
||||||
|
window.addEventListener('cookieConsentUpdated', function (event) {
|
||||||
|
var payload = event && event.detail ? event.detail : {};
|
||||||
|
var consent = payload.consent ? payload.consent : payload;
|
||||||
|
var analyticsGranted = !!(consent && consent.analytics);
|
||||||
|
var marketingGranted = !!(consent && consent.marketing);
|
||||||
|
|
||||||
|
gtag('consent', 'update', {
|
||||||
|
analytics_storage: analyticsGranted ? 'granted' : 'denied',
|
||||||
|
ad_storage: marketingGranted ? 'granted' : 'denied',
|
||||||
|
ad_user_data: marketingGranted ? 'granted' : 'denied',
|
||||||
|
ad_personalization: marketingGranted ? 'granted' : 'denied'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-EF0E9VPMTD"></script>
|
||||||
|
|
||||||
|
<script src="/assets/js/main.js" defer></script>
|
||||||
|
<script src="/assets/js/cookie-consent.js" defer></script>
|
||||||
|
<?php if (isset($additional_scripts)): ?>
|
||||||
|
<?php foreach ($additional_scripts as $script): ?>
|
||||||
|
<script src="<?php echo $script; ?>" defer></script>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
98
backend/includes/functions.php
Normal file
98
backend/includes/functions.php
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Helper functions for HexaHost.de
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Sichere Session-Konfiguration
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
// Session-Cookie-Sicherheit
|
||||||
|
ini_set('session.cookie_httponly', 1);
|
||||||
|
ini_set('session.cookie_secure', isset($_SERVER['HTTPS']) ? 1 : 0);
|
||||||
|
ini_set('session.cookie_samesite', 'Strict');
|
||||||
|
ini_set('session.use_strict_mode', 1);
|
||||||
|
ini_set('session.use_only_cookies', 1);
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
// Session-ID regenerieren bei Login/wichtigen Aktionen (Schutz vor Session Fixation)
|
||||||
|
if (!isset($_SESSION['initiated'])) {
|
||||||
|
session_regenerate_id(true);
|
||||||
|
$_SESSION['initiated'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PHP Error Display in Produktion deaktivieren
|
||||||
|
if (!defined('DEBUG_MODE') || !DEBUG_MODE) {
|
||||||
|
ini_set('display_errors', 0);
|
||||||
|
ini_set('display_startup_errors', 0);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('log_errors', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set page configuration and include header
|
||||||
|
*
|
||||||
|
* @param string $title The page title
|
||||||
|
* @param string $description The page description
|
||||||
|
* @param string $page The current page identifier
|
||||||
|
* @param array $scripts Additional scripts to include
|
||||||
|
*/
|
||||||
|
function includeHeader($title = '', $description = '', $page = '', $scripts = []) {
|
||||||
|
global $page_title, $page_description, $current_page, $additional_scripts;
|
||||||
|
|
||||||
|
// Set page configuration from parameters
|
||||||
|
$page_title = !empty($title)
|
||||||
|
? $title
|
||||||
|
: 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern';
|
||||||
|
|
||||||
|
$page_description = !empty($description)
|
||||||
|
? $description
|
||||||
|
: 'HexaHost.de - Zuverlässiges und preiswertes Hosting aus Niederbayern. VPS, VPC, Mail Gateway und Webhosting Lösungen.';
|
||||||
|
|
||||||
|
$current_page = $page;
|
||||||
|
$additional_scripts = $scripts;
|
||||||
|
|
||||||
|
include __DIR__ . '/header.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Include footer
|
||||||
|
*/
|
||||||
|
function includeFooter() {
|
||||||
|
include __DIR__ . '/footer.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate breadcrumb navigation
|
||||||
|
*
|
||||||
|
* @param array $breadcrumbs Array of breadcrumb items [['title' => 'Home', 'url' => 'index.html'], ...]
|
||||||
|
*/
|
||||||
|
function generateBreadcrumbs($breadcrumbs) {
|
||||||
|
echo '<div class="breadcrumb">';
|
||||||
|
$last_index = count($breadcrumbs) - 1;
|
||||||
|
|
||||||
|
foreach ($breadcrumbs as $index => $item) {
|
||||||
|
if ($index === $last_index) {
|
||||||
|
// Last item (current page)
|
||||||
|
echo '<span>' . htmlspecialchars($item['title']) . '</span>';
|
||||||
|
} else {
|
||||||
|
// Link to other pages
|
||||||
|
echo '<a href="' . htmlspecialchars($item['url']) . '">' . htmlspecialchars($item['title']) . '</a>';
|
||||||
|
echo '<span>/</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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'];
|
||||||
|
}
|
||||||
|
?>
|
||||||
81
backend/includes/header.php
Normal file
81
backend/includes/header.php
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<!-- Performance: DNS Prefetch & Preconnect -->
|
||||||
|
<link rel="dns-prefetch" href="//fonts.googleapis.com">
|
||||||
|
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||||
|
<link rel="dns-prefetch" href="//cdn.hexahost.de">
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link rel="preconnect" href="https://cdn.hexahost.de" crossorigin>
|
||||||
|
|
||||||
|
<!-- Performance: Preload kritischer Ressourcen -->
|
||||||
|
<link rel="preload" href="/assets/css/style.css" as="style">
|
||||||
|
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style">
|
||||||
|
|
||||||
|
<title><?php echo isset($page_title) ? htmlspecialchars($page_title) : 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern'; ?></title>
|
||||||
|
|
||||||
|
<!-- SEO Meta Tags -->
|
||||||
|
<meta name="description" content="<?php echo isset($page_description) ? htmlspecialchars($page_description) : 'HexaHost.de - Zuverlässiges und preiswertes Hosting aus Niederbayern. VPS, VPC, Mail Gateway und Webhosting Lösungen.'; ?>">
|
||||||
|
<meta name="robots" content="index, follow">
|
||||||
|
<meta name="author" content="HexaHost.de">
|
||||||
|
<meta name="theme-color" content="#0d0821">
|
||||||
|
|
||||||
|
<!-- Open Graph / Social Media -->
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:site_name" content="HexaHost.de">
|
||||||
|
<meta property="og:title" content="<?php echo isset($page_title) ? htmlspecialchars($page_title) : 'HexaHost.de'; ?>">
|
||||||
|
<meta property="og:description" content="<?php echo isset($page_description) ? htmlspecialchars($page_description) : 'Zuverlässiges Hosting aus Niederbayern'; ?>">
|
||||||
|
<meta property="og:locale" content="de_DE">
|
||||||
|
|
||||||
|
<!-- Main Stylesheets -->
|
||||||
|
<link rel="stylesheet" href="/assets/css/style.css">
|
||||||
|
<link rel="stylesheet" href="/assets/css/custom.css">
|
||||||
|
|
||||||
|
<!-- Fonts -->
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Russo+One&family=Source+Sans+Pro:wght@300;400;600;700&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||||
|
<link rel="apple-touch-icon" href="/favicon.svg">
|
||||||
|
|
||||||
|
<!-- Canonical URL (falls gesetzt) -->
|
||||||
|
<?php if (isset($canonical_url)): ?>
|
||||||
|
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||||
|
<?php endif; ?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header class="header">
|
||||||
|
<nav class="nav">
|
||||||
|
<div class="nav-container">
|
||||||
|
<div class="nav-logo">
|
||||||
|
<a href="/">
|
||||||
|
<img src="https://cdn.hexahost.de/assets/img/logo/8iFs123BynHQWHI5.png" alt="HexaHost.de Logo" class="logo-image">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<ul class="nav-menu">
|
||||||
|
<li><a href="/" class="nav-link <?php echo ($current_page === 'home') ? 'active' : ''; ?>">Home</a></li>
|
||||||
|
<li class="nav-dropdown">
|
||||||
|
<a href="#" class="nav-link <?php echo (in_array($current_page, ['vpc', 'vps', 'mail-gateway', 'webhosting'])) ? 'active' : ''; ?>">Produkte</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="/vpc" class="<?php echo ($current_page === 'vpc') ? 'active' : ''; ?>">Virtual Private Container</a></li>
|
||||||
|
<li><a href="/vps" class="<?php echo ($current_page === 'vps') ? 'active' : ''; ?>">Virtual Private Server</a></li>
|
||||||
|
<li><a href="/mail-gateway" class="<?php echo ($current_page === 'mail-gateway') ? 'active' : ''; ?>">Mail Gateway</a></li>
|
||||||
|
<li><a href="/webhosting" class="<?php echo ($current_page === 'webhosting') ? 'active' : ''; ?>">Webhosting</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="/it-dienstleistungen" class="nav-link <?php echo ($current_page === 'it-dienstleistungen') ? 'active' : ''; ?>">IT-Dienstleistungen</a></li>
|
||||||
|
<li><a href="/about" class="nav-link <?php echo ($current_page === 'about') ? 'active' : ''; ?>">Über mich</a></li>
|
||||||
|
<li><a href="/contact" class="nav-link <?php echo ($current_page === 'contact') ? 'active' : ''; ?>">Kontakt</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="nav-toggle">
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
@@ -148,9 +148,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="demo-card">
|
<div class="demo-card">
|
||||||
<h3>ℹ️ Über uns</h3>
|
<h3>ℹ️ Über mich</h3>
|
||||||
<p>Unternehmensinformationen aus Niederbayern</p>
|
<p>Unternehmensinformationen aus Niederbayern</p>
|
||||||
<a href="public/about.html">Über uns ansehen</a>
|
<a href="public/about.html">Über mich ansehen</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="demo-card">
|
<div class="demo-card">
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ Eine neue `mail-gateway.php`-Datei wurde erstellt mit:
|
|||||||
```
|
```
|
||||||
public/
|
public/
|
||||||
├── index.php (Hauptseite)
|
├── index.php (Hauptseite)
|
||||||
├── about.php (Über uns)
|
├── about.php (Über mich)
|
||||||
├── contact.php (Kontakt)
|
├── contact.php (Kontakt)
|
||||||
├── vpc.php (Virtual Private Container)
|
├── vpc.php (Virtual Private Container)
|
||||||
├── vps.php (Virtual Private Server)
|
├── vps.php (Virtual Private Server)
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ Die Website wurde umstrukturiert, um Header und Footer in zentralen Dateien zu s
|
|||||||
|
|
||||||
### Zentrale Dateien
|
### Zentrale Dateien
|
||||||
|
|
||||||
- `includes/header.php` - Enthält den HTML-Header mit Navigation
|
- `/backend/includes/header.php` - Enthält den HTML-Header mit Navigation
|
||||||
- `includes/footer.php` - Enthält den HTML-Footer mit Links und Copyright
|
- `/backend/includes/footer.php` - Enthält den HTML-Footer mit Links und Copyright
|
||||||
- `includes/functions.php` - Helper-Funktionen für die Website
|
- `/backend/includes/functions.php` - Helper-Funktionen für die Website
|
||||||
|
|
||||||
### Konvertierte Seiten
|
### 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)
|
- `vpc.php` - Virtual Private Container (vorher vpc.html)
|
||||||
- `vps.php` - Virtual Private Server (vorher vps.html)
|
- `vps.php` - Virtual Private Server (vorher vps.html)
|
||||||
- `webhosting.php` - Webhosting (vorher webhosting.html)
|
- `webhosting.php` - Webhosting (vorher webhosting.html)
|
||||||
- `about.php` - Über uns (vorher about.html)
|
- `about.php` - Über mich (vorher about.html)
|
||||||
|
|
||||||
## Verwendung
|
## Verwendung
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ Die Website wurde umstrukturiert, um Header und Footer in zentralen Dateien zu s
|
|||||||
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Seitentitel - HexaHost.de';
|
$page_title = 'Seitentitel - HexaHost.de';
|
||||||
@@ -99,7 +99,7 @@ generateBreadcrumbs([
|
|||||||
### Nachher (PHP)
|
### Nachher (PHP)
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
includeHeader('Seitentitel', 'Beschreibung', 'seitenname');
|
includeHeader('Seitentitel', 'Beschreibung', 'seitenname');
|
||||||
?>
|
?>
|
||||||
<main>
|
<main>
|
||||||
@@ -117,15 +117,15 @@ includeHeader('Seitentitel', 'Beschreibung', 'seitenname');
|
|||||||
|
|
||||||
## Dateien
|
## Dateien
|
||||||
|
|
||||||
- `includes/header.php` - Zentrale Header-Datei
|
- `/backend/includes/header.php` - Zentrale Header-Datei
|
||||||
- `includes/footer.php` - Zentrale Footer-Datei
|
- `/backend/includes/footer.php` - Zentrale Footer-Datei
|
||||||
- `includes/functions.php` - Helper-Funktionen
|
- `/backend/includes/functions.php` - Helper-Funktionen
|
||||||
- `index.php` - Startseite (PHP-Version)
|
- `index.php` - Startseite (PHP-Version)
|
||||||
- `contact.php` - Kontaktseite (PHP-Version)
|
- `contact.php` - Kontaktseite (PHP-Version)
|
||||||
- `vpc.php` - Virtual Private Container (PHP-Version)
|
- `vpc.php` - Virtual Private Container (PHP-Version)
|
||||||
- `vps.php` - Virtual Private Server (PHP-Version)
|
- `vps.php` - Virtual Private Server (PHP-Version)
|
||||||
- `webhosting.php` - Webhosting (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)
|
- `contact.html` - Alte HTML-Version (kann gelöscht werden)
|
||||||
- `index.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)
|
- `vpc.html` - Alte HTML-Version (kann gelöscht werden)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<IfModule mod_rewrite.c>
|
<IfModule mod_rewrite.c>
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
RewriteCond %{HTTPS} off
|
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]
|
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||||
|
|
||||||
# PHP-Endung aus URLs entfernen
|
# PHP-Endung aus URLs entfernen
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = '404 - Seite nicht gefunden | HexaHost.de';
|
$page_title = '404 - Seite nicht gefunden | HexaHost.de';
|
||||||
@@ -13,7 +13,7 @@ http_response_code(404);
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<section class="error-page">
|
<section class="error-page">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="error-content glass-card">
|
<div class="error-content glass-card">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = '500 - Serverfehler | HexaHost.de';
|
$page_title = '500 - Serverfehler | HexaHost.de';
|
||||||
@@ -13,7 +13,7 @@ http_response_code(500);
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<section class="error-page">
|
<section class="error-page">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="error-content glass-card">
|
<div class="error-content glass-card">
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Über uns - HexaHost.de | Hosting aus Niederbayern';
|
$page_title = 'Über mich - HexaHost.de | Hosting aus Niederbayern';
|
||||||
$page_description = 'Erfahren Sie mehr über HexaHost.de - Ihr zuverlässiger Hosting-Partner aus Niederbayern. Moderne Technologie mit persönlichem Service.';
|
$page_description = 'Erfahren Sie mehr über HexaHost.de - Ihr zuverlässiger Hosting-Partner aus Niederbayern. Moderne Technologie mit persönlichem Service.';
|
||||||
$current_page = 'about';
|
$current_page = 'about';
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ $current_page = 'about';
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- About Hero -->
|
<!-- About Hero -->
|
||||||
<section class="about-hero">
|
<section class="about-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -18,15 +18,15 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<?php
|
<?php
|
||||||
generateBreadcrumbs([
|
generateBreadcrumbs([
|
||||||
['title' => 'Home', 'url' => 'index.php'],
|
['title' => 'Home', 'url' => 'index.php'],
|
||||||
['title' => 'Über uns', 'url' => '']
|
['title' => 'Über mich', 'url' => '']
|
||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<h1 class="about-hero-title">
|
<h1 class="about-hero-title">
|
||||||
Über <span class="highlight">HexaHost.de</span>
|
Über <span class="highlight">HexaHost.de</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="about-hero-description">
|
<p class="about-hero-description">
|
||||||
Wir sind Ihr zuverlässiger Partner für Hosting-Lösungen aus Niederbayern.
|
Wir sind Ihr zuverlässiger Partner für Hosting- und IT-Lösungen aus Niederbayern.
|
||||||
Mit modernster Technologie und persönlichem Service sorgen wir dafür,
|
Mit moderner Technologie und persönlichem Service sorgen wir dafür,
|
||||||
dass Ihre Online-Projekte erfolgreich sind.
|
dass Ihre Online-Projekte erfolgreich sind.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -40,20 +40,20 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<div class="story-text">
|
<div class="story-text">
|
||||||
<h2 class="section-title">Unsere Geschichte</h2>
|
<h2 class="section-title">Unsere Geschichte</h2>
|
||||||
<p>
|
<p>
|
||||||
HexaHost.de wurde mit der Vision gegründet, zuverlässiges und preiswertes
|
HexaHost.de wurde von mir, Samuel Müller, mit der Vision gegründet, zuverlässiges
|
||||||
Hosting direkt aus Deutschland anzubieten. Als regionales Unternehmen aus
|
und preiswertes Hosting und IT-Lösungen direkt aus Deutschland anzubieten. Als regionales
|
||||||
Niederbayern verstehen wir die Bedürfnisse unserer Kunden und bieten
|
Unternehmen aus Niederbayern verstehe ich die Bedürfnisse meiner Kunden
|
||||||
persönlichen Support in deutscher Sprache.
|
und bieten persönlichen Support.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
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
|
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.
|
Lösung.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Vertrauen, Zuverlässigkeit und faire Preise sind die Grundpfeiler unseres
|
Vertrauen, Zuverlässigkeit und faire Preise sind die Grundpfeiler meines
|
||||||
Unternehmens. Wir setzen auf transparente Kommunikation und ehrliche
|
Unternehmens. Ich setze auf transparente Kommunikation und ehrliche
|
||||||
Beratung, damit Sie die beste Lösung für Ihre Anforderungen erhalten.
|
Beratung, damit Sie die beste Lösung für Ihre Anforderungen erhalten.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,9 +66,11 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="location-details">
|
<div class="location-details">
|
||||||
<h3>Standort</h3>
|
<h3>Standort (Büro)</h3>
|
||||||
<p>Niederbayern, Deutschland</p>
|
<p>HexaHost Inh. Samuel Müller</p>
|
||||||
<p>Regional verwurzelt, global verfügbar</p>
|
<p>Richard-Miller-Straße 1</p>
|
||||||
|
<p>94051 Hauzenberg</p>
|
||||||
|
<p>Deutschland</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -80,9 +82,9 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="values">
|
<section class="values">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">Unsere Werte</h2>
|
<h2 class="section-title">Meine Werte</h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Das, was uns ausmacht und antreibt
|
Das, was mich ausmacht und antreibt
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="values-grid">
|
<div class="values-grid">
|
||||||
@@ -93,7 +95,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Zuverlässigkeit</h3>
|
<h3>Zuverlässigkeit</h3>
|
||||||
<p>99.9% Uptime-Garantie und 24/7 Monitoring für maximale Verfügbarkeit Ihrer Services.</p>
|
<p>99% Uptime und 24/7 Monitoring für maximale Verfügbarkeit Ihrer Services.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-item glass-card">
|
<div class="value-item glass-card">
|
||||||
<div class="value-icon">
|
<div class="value-icon">
|
||||||
@@ -111,7 +113,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Persönlicher Support</h3>
|
<h3>Persönlicher Support</h3>
|
||||||
<p>Direkter Kontakt zu unserem Team aus Niederbayern in deutscher Sprache.</p>
|
<p>Direkter Kontakt zu mir aus Niederbayern, gerne auch bei Ihnen vor Ort in Deutschland.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="value-item glass-card">
|
<div class="value-item glass-card">
|
||||||
<div class="value-icon">
|
<div class="value-icon">
|
||||||
@@ -126,21 +128,21 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Team -->
|
<!--
|
||||||
<section class="team">
|
<section class="team">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">Unser Team</h2>
|
<h2 class="section-title">Mein Team</h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Die Menschen hinter HexaHost.de
|
Die Menschen, die hinter HexaHost.de stehen
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="team-content">
|
<div class="team-content">
|
||||||
<div class="team-text">
|
<div class="team-text">
|
||||||
<p>
|
<p>
|
||||||
Unser Team besteht aus erfahrenen IT-Experten mit langjähriger Erfahrung
|
Mein Team besteht aus erfahrenen IT-Experten, die langjährige Erfahrung
|
||||||
im Bereich Hosting und Server-Management. Wir sind leidenschaftlich
|
im Bereich Hosting und Server-Management. Ich bin leidenschaftlich
|
||||||
daran interessiert, Ihnen die bestmöglichen Hosting-Lösungen zu bieten.
|
daran interessiert, Ihnen die bestmöglichen Hosting- und IT-Lösungen zu bieten.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Als regionales Unternehmen aus Niederbayern kennen wir die lokalen
|
Als regionales Unternehmen aus Niederbayern kennen wir die lokalen
|
||||||
@@ -170,6 +172,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- Technology -->
|
<!-- Technology -->
|
||||||
<section class="technology">
|
<section class="technology">
|
||||||
@@ -190,7 +193,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Proxmox VE</h3>
|
<h3>Proxmox VE</h3>
|
||||||
<p>Enterprise-Grade Virtualisierung mit Proxmox Virtual Environment für maximale Effizienz und Sicherheit.</p>
|
<p>Enterprise-Grade Virtualisierung mit Proxmox VE für maximale Effizienz und Sicherheit.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tech-item glass-card">
|
<div class="tech-item glass-card">
|
||||||
<div class="tech-icon">
|
<div class="tech-icon">
|
||||||
@@ -199,7 +202,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>NVMe SSD</h3>
|
<h3>NVMe SSD</h3>
|
||||||
<p>Hochperformante NVMe SSD-Speicher für schnellste Ladezeiten und optimale I/O-Performance.</p>
|
<p>Hochperformante NVMe SSD-Speicher für schnelle Ladezeiten und optimale I/O-Performance.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tech-item glass-card">
|
<div class="tech-item glass-card">
|
||||||
<div class="tech-icon">
|
<div class="tech-icon">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Allgemeine Geschäftsbedingungen - HexaHost.de | AGB';
|
$page_title = 'Allgemeine Geschäftsbedingungen - HexaHost.de | AGB';
|
||||||
@@ -10,7 +10,7 @@ $current_page = 'agb';
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- AGB Hero -->
|
<!-- AGB Hero -->
|
||||||
<section class="legal-hero">
|
<section class="legal-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
17
public/assets/css/custom.css
Normal file
17
public/assets/css/custom.css
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.btn-tertiary {
|
||||||
|
color: var(--text-primary);
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.25);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-tertiary:hover {
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
color: var(--primary-color);
|
||||||
|
background: rgba(255, 81, 249, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.it-services-actions {
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
1
public/assets/css/style.css
Normal file
1
public/assets/css/style.css
Normal file
File diff suppressed because one or more lines are too long
1
public/assets/js/contact.js
Normal file
1
public/assets/js/contact.js
Normal file
File diff suppressed because one or more lines are too long
1
public/assets/js/cookie-consent.js
Normal file
1
public/assets/js/cookie-consent.js
Normal file
File diff suppressed because one or more lines are too long
1
public/assets/js/main.js
Normal file
1
public/assets/js/main.js
Normal file
File diff suppressed because one or more lines are too long
@@ -10,7 +10,12 @@ if (session_status() === PHP_SESSION_NONE) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Konfiguration laden
|
// Konfiguration laden
|
||||||
require_once 'config/config.php';
|
require_once 'config/mail-config.php';
|
||||||
|
|
||||||
|
// PHPMailer Autoload (falls via Composer installiert)
|
||||||
|
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
|
||||||
|
require_once __DIR__ . '/vendor/autoload.php';
|
||||||
|
}
|
||||||
|
|
||||||
// Konfiguration verwenden
|
// Konfiguration verwenden
|
||||||
$config = getHexaHostConfig();
|
$config = getHexaHostConfig();
|
||||||
@@ -305,7 +310,7 @@ function generateEmailHTML($data) {
|
|||||||
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<p>Diese E-Mail wurde automatisch vom HexaHost.de Kontaktformular generiert.</p>
|
<p>Diese E-Mail wurde automatisch vom HexaHost.de Kontaktformular generiert.</p>
|
||||||
<p>© 2024 HexaHost.de - Alle Rechte vorbehalten</p>
|
<p>© ' . date('Y') . ' HexaHost.de - Alle Rechte vorbehalten</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
@@ -342,7 +347,7 @@ function generateEmailText($data) {
|
|||||||
|
|
||||||
$text .= "---\n";
|
$text .= "---\n";
|
||||||
$text .= "Diese E-Mail wurde automatisch vom HexaHost.de Kontaktformular generiert.\n";
|
$text .= "Diese E-Mail wurde automatisch vom HexaHost.de Kontaktformular generiert.\n";
|
||||||
$text .= "© 2024 HexaHost.de - Alle Rechte vorbehalten";
|
$text .= "© " . date('Y') . " HexaHost.de - Alle Rechte vorbehalten";
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Kontakt - HexaHost.de | Hosting aus Niederbayern';
|
$page_title = 'Kontakt - HexaHost.de | Hosting aus Niederbayern';
|
||||||
@@ -11,7 +11,7 @@ $additional_scripts = ['assets/js/contact.js'];
|
|||||||
includeHeader($page_title, $page_description, $current_page, $additional_scripts);
|
includeHeader($page_title, $page_description, $current_page, $additional_scripts);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Contact Hero -->
|
<!-- Contact Hero -->
|
||||||
<section class="contact-hero">
|
<section class="contact-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -26,8 +26,8 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
Kontakt zu <span class="highlight">HexaHost.de</span>
|
Kontakt zu <span class="highlight">HexaHost.de</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="contact-hero-description">
|
<p class="contact-hero-description">
|
||||||
Haben Sie Fragen zu unseren Hosting-Lösungen? Benötigen Sie Beratung oder
|
Haben Sie Fragen zu den Hosting- oder IT-Lösungen? Benötigen Sie Beratung oder
|
||||||
Support? Unser Team aus Niederbayern steht Ihnen gerne zur Verfügung.
|
Support? Ich stehe Ihnen gerne zur Verfügung.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -45,7 +45,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>E-Mail</h3>
|
<h3>E-Mail</h3>
|
||||||
<p>Schreiben Sie uns eine E-Mail - wir antworten schnell und kompetent.</p>
|
<p>Schreiben Sie mir eine E-Mail - ich antworte innerhalb von 4 Stunden.</p>
|
||||||
<a href="mailto:info@hexahost.de" class="contact-link">info@hexahost.de</a>
|
<a href="mailto:info@hexahost.de" class="contact-link">info@hexahost.de</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="contact-item glass-card">
|
<div class="contact-item glass-card">
|
||||||
@@ -55,8 +55,8 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Telefon</h3>
|
<h3>Telefon</h3>
|
||||||
<p>Für dringende Anliegen erreichen Sie uns auch telefonisch.</p>
|
<p>Für dringende Anliegen erreichen Sie mich auch telefonisch.</p>
|
||||||
<a href="tel:+4985119999999" class="contact-link">+49 851 1999 9999</a>
|
<a href="tel:+4915566175855" class="contact-link">+49 15566 175855</a>
|
||||||
<p class="contact-hours">Mo-Fr: 9:00-18:00 Uhr</p>
|
<p class="contact-hours">Mo-Fr: 9:00-18:00 Uhr</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="contact-item glass-card">
|
<div class="contact-item glass-card">
|
||||||
@@ -67,7 +67,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
</div>
|
</div>
|
||||||
<h3>Discord</h3>
|
<h3>Discord</h3>
|
||||||
<p>Direkter Support über unseren Discord für schnelle Hilfe.</p>
|
<p>Direkter Support über unseren Discord für schnelle Hilfe.</p>
|
||||||
<button class="contact-link chat-btn" onclick="window.open('https://discord.gg/DEIN-EINLADUNGS-LINK', '_blank')">Discord beitreten</button>
|
<button class="contact-link chat-btn" onclick="window.open('https://discord.gg/PG6UqPZwGr', '_blank')">Discord beitreten</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="contact-item glass-card">
|
<div class="contact-item glass-card">
|
||||||
@@ -77,9 +77,9 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<circle cx="12" cy="10" r="3"/>
|
<circle cx="12" cy="10" r="3"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Unser Standort</h3>
|
<h3>Bei Ihnen vor Ort</h3>
|
||||||
<p>HexaHost.de<br>Niederbayern<br>Deutschland</p>
|
<p>Gerne komme ich zu Ihnen vor Ort um Ihnen persönlich zu helfen.</p>
|
||||||
<p class="contact-hours">Regional verwurzelt</p>
|
<p class="contact-hours">Nur auf Anfrage verfügbar</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -92,7 +92,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<div class="form-header">
|
<div class="form-header">
|
||||||
<h2 class="section-title">Kontaktformular</h2>
|
<h2 class="section-title">Kontaktformular</h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Senden Sie uns eine Nachricht - wir melden uns schnellstmöglich bei Ihnen
|
Senden Sie mir eine Nachricht - ich melde mich schnellstmöglich bei Ihnen
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<form class="contact-form glass-card" id="contactForm" action="contact-handler.php" method="POST">
|
<form class="contact-form glass-card" id="contactForm" action="contact-handler.php" method="POST">
|
||||||
@@ -134,6 +134,12 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<option value="vps-anfrage">Virtual Private Server</option>
|
<option value="vps-anfrage">Virtual Private Server</option>
|
||||||
<option value="mail-gateway-anfrage">Mail Gateway</option>
|
<option value="mail-gateway-anfrage">Mail Gateway</option>
|
||||||
<option value="webhosting-anfrage">Webhosting</option>
|
<option value="webhosting-anfrage">Webhosting</option>
|
||||||
|
<option value="it-beratung">IT-Beratung</option>
|
||||||
|
<option value="it-support">IT-Support & Fehlerbehebung</option>
|
||||||
|
<option value="netzwerk-wlan">Netzwerk & WLAN-Einrichtung</option>
|
||||||
|
<option value="it-sicherheit-backup">IT-Sicherheit & Backup</option>
|
||||||
|
<option value="webseiten-hosting-service">Webseiten- & Hosting-Service</option>
|
||||||
|
<option value="wartung-betreuung">Wartung & Betreuung</option>
|
||||||
<option value="support">Technischer Support</option>
|
<option value="support">Technischer Support</option>
|
||||||
<option value="beratung">Persönliche Beratung</option>
|
<option value="beratung">Persönliche Beratung</option>
|
||||||
<option value="migration">Migration/Umzug</option>
|
<option value="migration">Migration/Umzug</option>
|
||||||
@@ -175,7 +181,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-item glass-card">
|
<div class="faq-item glass-card">
|
||||||
@@ -184,7 +190,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-item glass-card">
|
<div class="faq-item glass-card">
|
||||||
@@ -193,7 +199,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>Selbstverständlich! Wir unterstützen Sie beim Umzug von Ihrem bisherigen Hosting-Anbieter zu uns. Unser Migrations-Service ist in vielen Fällen kostenlos.</p>
|
<p>Selbstverständlich! Ich unterstütze Sie beim Umzug von Ihrem bisherigen Hosting-Anbieter zu mir. Mein Migrations-Service ist in vielen Fällen kostenlos.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-item glass-card">
|
<div class="faq-item glass-card">
|
||||||
@@ -202,7 +208,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-item glass-card">
|
<div class="faq-item glass-card">
|
||||||
@@ -211,7 +217,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>Alle unsere Server stehen in deutschen Rechenzentren. Das gewährleistet DSGVO-Konformität und niedrige Latenzzeiten für deutsche Nutzer.</p>
|
<p>Alle Server stehen in deutschen Rechenzentren. Das gewährleistet DSGVO-Konformität und niedrige Latenzzeiten für deutsche Nutzer.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-item glass-card">
|
<div class="faq-item glass-card">
|
||||||
@@ -220,7 +226,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
<span class="faq-toggle">+</span>
|
<span class="faq-toggle">+</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="faq-answer">
|
<div class="faq-answer">
|
||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -247,7 +253,7 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
|
|||||||
</div>
|
</div>
|
||||||
<div class="response-text">
|
<div class="response-text">
|
||||||
<h3>Schnelle Hilfe garantiert</h3>
|
<h3>Schnelle Hilfe garantiert</h3>
|
||||||
<p>Unser Support-Team ist darauf spezialisiert, Ihnen schnell und effektiv zu helfen. Die meisten Anfragen werden innerhalb von 2 Stunden beantwortet.</p>
|
<p>Mein direkter Support ist darauf spezialisiert, Ihnen schnell und effektiv zu helfen. Die meisten Anfragen werden innerhalb von 2 Stunden beantwortet.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Datenschutzerklärung - HexaHost.de | Datenschutz';
|
$page_title = 'Datenschutzerklärung - HexaHost.de | Datenschutz';
|
||||||
@@ -10,7 +10,7 @@ $current_page = 'datenschutz';
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Datenschutz Hero -->
|
<!-- Datenschutz Hero -->
|
||||||
<section class="legal-hero">
|
<section class="legal-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Impressum - HexaHost.de | Rechtliche Angaben';
|
$page_title = 'Impressum - HexaHost.de | Rechtliche Angaben';
|
||||||
@@ -10,7 +10,7 @@ $current_page = 'impressum';
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Impressum Hero -->
|
<!-- Impressum Hero -->
|
||||||
<section class="legal-hero">
|
<section class="legal-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern';
|
$page_title = 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern';
|
||||||
@@ -10,7 +10,7 @@ $current_page = 'home';
|
|||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Hero Section -->
|
<!-- Hero Section -->
|
||||||
<section class="hero">
|
<section class="hero">
|
||||||
<div class="hero-container">
|
<div class="hero-container">
|
||||||
@@ -37,7 +37,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<line x1="12" y1="17" x2="12" y2="21"/>
|
<line x1="12" y1="17" x2="12" y2="21"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>99.9% Uptime</h3>
|
<h3>99% Uptime</h3>
|
||||||
<p>Zuverlässige Infrastruktur</p>
|
<p>Zuverlässige Infrastruktur</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -70,7 +70,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<li>Proxmox LXC Container</li>
|
<li>Proxmox LXC Container</li>
|
||||||
<li>SSD Storage</li>
|
<li>SSD Storage</li>
|
||||||
<li>DDoS Protection</li>
|
<li>DDoS Protection</li>
|
||||||
<li>99.9% Uptime</li>
|
<li>99% Uptime</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/vpc" class="btn btn-primary">Mehr erfahren</a>
|
<a href="/vpc" class="btn btn-primary">Mehr erfahren</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -99,13 +99,13 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<polyline points="22,6 12,13 2,6"/>
|
<polyline points="22,6 12,13 2,6"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Mail Gateway</h3>
|
<h3>Proxmox Mail Gateway</h3>
|
||||||
<p>Professionelle E-Mail-Lösungen für Unternehmen</p>
|
<p>Leistungsstarke E-Mail-Security mit Spam- und Virenfilter für Unternehmen</p>
|
||||||
<ul class="product-features">
|
<ul class="product-features">
|
||||||
<li>Spam & Virus Schutz</li>
|
<li>Spam- und Virenschutz</li>
|
||||||
<li>E-Mail Archivierung</li>
|
<li>Quarantäne-Management</li>
|
||||||
<li>Webmail Interface</li>
|
<li>Tracking Center & Reporting</li>
|
||||||
<li>Mobile Sync</li>
|
<li>Open Source auf Proxmox-Basis</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/mail-gateway" class="btn btn-primary">Mehr erfahren</a>
|
<a href="/mail-gateway" class="btn btn-primary">Mehr erfahren</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -122,13 +122,72 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<h3>Webhosting</h3>
|
<h3>Webhosting</h3>
|
||||||
<p>Einfache und zuverlässige Webhosting-Lösungen</p>
|
<p>Einfache und zuverlässige Webhosting-Lösungen</p>
|
||||||
<ul class="product-features">
|
<ul class="product-features">
|
||||||
<li>cPanel/Webmin</li>
|
<li>Plesk Webhosting</li>
|
||||||
<li>SSL Zertifikate</li>
|
<li>SSL Zertifikate</li>
|
||||||
<li>Automatische Backups</li>
|
<li>Automatische Backups</li>
|
||||||
<li>PHP & MySQL</li>
|
<li>PHP & MariaDB</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/webhosting" class="btn btn-primary">Mehr erfahren</a>
|
<a href="/webhosting" class="btn btn-primary">Mehr erfahren</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="product-card glass-card">
|
||||||
|
<div class="product-icon">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
|
||||||
|
<polyline points="22,6 12,13 2,6"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h3>Mail Service</h3>
|
||||||
|
<p>Kostenfreier E-Mail-Dienst mit 2 GB Mail-Speicher inklusive</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Kostenlos & werbefrei</li>
|
||||||
|
<li>2 GB Mail-Speicher</li>
|
||||||
|
<li>Webmail-Zugang</li>
|
||||||
|
<li>IMAP & SMTP Unterstützung</li>
|
||||||
|
</ul>
|
||||||
|
<a href="https://www.hexa-mail.de/" class="btn btn-primary" target="_blank" rel="noopener noreferrer">Mehr erfahren</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- IT Services Section -->
|
||||||
|
<section class="features">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-header">
|
||||||
|
<h2 class="section-title">IT-Dienstleistungen für Privat und ergänzend Gewerblich</h2>
|
||||||
|
<p class="section-description">
|
||||||
|
Ergänzend zu unseren Hosting-Angeboten unterstützen wir Sie mit persönlicher IT-Betreuung.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="features-grid">
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>IT-Beratung</h3>
|
||||||
|
<p>Individuelle Beratung für sinnvolle und wirtschaftliche IT-Entscheidungen.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>Support & Fehlerbehebung</h3>
|
||||||
|
<p>Schnelle Hilfe bei technischen Problemen - remote oder bei Ihnen vor Ort.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>Netzwerk & WLAN-Einrichtung</h3>
|
||||||
|
<p>Stabile und sichere Netzwerke für Büro, Homeoffice und Zuhause.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>IT-Sicherheit & Backup</h3>
|
||||||
|
<p>Schutzkonzepte und Backup-Strategien für Ihre Daten und Systeme.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>Webseiten- & Hosting-Service</h3>
|
||||||
|
<p>Technische Betreuung Ihrer Webpräsenz von Einrichtung bis Optimierung.</p>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item glass-card">
|
||||||
|
<h3>Wartung & Betreuung</h3>
|
||||||
|
<p>Regelmäßige Pflege und verlässliche Unterstützung im laufenden Betrieb.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="cta-actions it-services-actions">
|
||||||
|
<a href="/it-dienstleistungen" class="btn btn-primary">Mehr zu IT-Dienstleistungen</a>
|
||||||
|
<a href="/contact" class="btn btn-secondary">Jetzt Anfrage stellen</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -165,16 +224,16 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Performance</h3>
|
<h3>Performance</h3>
|
||||||
<p>Modernste Hardware und optimierte Konfigurationen für beste Leistung</p>
|
<p>Moderne Hardware und optimierte Konfigurationen für beste Leistung</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-item glass-card">
|
<div class="feature-item glass-card">
|
||||||
<div class="feature-icon">
|
<div class="feature-icon">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
<path d="M12 2v20M17 7l-5-5-5 5M17 17l-5 5-5-5"/>
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Faire Preise</h3>
|
<h3>Maximale Sicherheit</h3>
|
||||||
<p>Transparent kalkulierte Preise ohne versteckte Kosten</p>
|
<p>DDoS-Schutz, SSL-Zertifikate und regelmäßige Backups inklusive</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-item glass-card">
|
<div class="feature-item glass-card">
|
||||||
<div class="feature-icon">
|
<div class="feature-icon">
|
||||||
@@ -183,7 +242,7 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Support aus Bayern</h3>
|
<h3>Support aus Bayern</h3>
|
||||||
<p>Persönlicher Support direkt aus Niederbayern in deutscher Sprache</p>
|
<p>Persönlicher Support direkt aus Niederbayern</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -196,8 +255,9 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<h2>Bereit für zuverlässiges Hosting?</h2>
|
<h2>Bereit für zuverlässiges Hosting?</h2>
|
||||||
<p>Starten Sie noch heute mit HexaHost und erleben Sie den Unterschied</p>
|
<p>Starten Sie noch heute mit HexaHost und erleben Sie den Unterschied</p>
|
||||||
<div class="cta-actions">
|
<div class="cta-actions">
|
||||||
<a href="/contact" class="btn btn-primary">Jetzt starten</a>
|
<a href="#products" class="btn btn-primary">Jetzt produkte entdecken</a>
|
||||||
<a href="/about" class="btn btn-secondary">Mehr über uns</a>
|
<a href="/contact" class="btn btn-secondary">Kontakt aufnehmen</a>
|
||||||
|
<a href="/about" class="btn btn-tertiary">Mehr über uns</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
148
public/it-dienstleistungen.php
Normal file
148
public/it-dienstleistungen.php
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
<?php
|
||||||
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
|
// Page configuration
|
||||||
|
$page_title = 'IT-Dienstleistungen - HexaHost.de | Privat & Gewerblich';
|
||||||
|
$page_description = 'IT-Dienstleistungen von HexaHost.de mit Fokus auf Privatkunden und ergänzend für gewerbliche Anforderungen.';
|
||||||
|
$current_page = 'it-dienstleistungen';
|
||||||
|
|
||||||
|
// Include header
|
||||||
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main id="main-content">
|
||||||
|
<!-- Services Hero -->
|
||||||
|
<section class="about-hero">
|
||||||
|
<div class="container">
|
||||||
|
<div class="about-hero-content">
|
||||||
|
<?php
|
||||||
|
generateBreadcrumbs([
|
||||||
|
['title' => 'Home', 'url' => 'index.php'],
|
||||||
|
['title' => 'IT-Dienstleistungen', 'url' => '']
|
||||||
|
]);
|
||||||
|
?>
|
||||||
|
<h1 class="about-hero-title">
|
||||||
|
IT-Dienstleistungen mit Fokus auf <span class="highlight">Privatkunden</span>
|
||||||
|
</h1>
|
||||||
|
<p class="about-hero-description">
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Target Groups -->
|
||||||
|
<section class="values">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-header">
|
||||||
|
<h2 class="section-title">Für wen sind die Leistungen geeignet?</h2>
|
||||||
|
<p class="section-description">
|
||||||
|
Maßgeschneiderte IT-Unterstützung mit klarem Schwerpunkt auf Privatkunden
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="values-grid">
|
||||||
|
<article class="value-item glass-card">
|
||||||
|
<h3>Privat</h3>
|
||||||
|
<p>
|
||||||
|
Für Privatpersonen und Familien, die schnelle Hilfe bei IT-Problemen, sichere Heimnetzwerke
|
||||||
|
und verständliche Unterstützung im Alltag wünschen.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
<article class="value-item glass-card">
|
||||||
|
<h3>Gewerblich (sekundär)</h3>
|
||||||
|
<p>
|
||||||
|
Für Unternehmen, Selbstständige und Teams, die ergänzend eine zuverlässige IT-Basis benötigen:
|
||||||
|
strukturierte Beratung, stabile Systeme und planbare Betreuung.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Services Grid -->
|
||||||
|
<section class="products">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-header">
|
||||||
|
<h2 class="section-title">Unsere IT-Dienstleistungen im Überblick</h2>
|
||||||
|
<p class="section-description">
|
||||||
|
Keine Pauschalpreise: Sie erhalten ein individuelles Angebot passend zu Ihrem Bedarf.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="products-grid">
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>IT-Beratung</h3>
|
||||||
|
<p>Strategische und praxisnahe Beratung für Ihre IT-Entscheidungen.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Ist-Analyse und Zieldefinition</li>
|
||||||
|
<li>Empfehlungen für Hard- und Software</li>
|
||||||
|
<li>Roadmap für sichere Umsetzung</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>Support & Fehlerbehebung</h3>
|
||||||
|
<p>Schnelle Hilfe bei technischen Problemen - remote oder bei Ihnen vor Ort.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Akute Störungen beheben</li>
|
||||||
|
<li>Systeme stabilisieren</li>
|
||||||
|
<li>Nachhaltige Lösungsansätze</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>Netzwerk & WLAN-Einrichtung</h3>
|
||||||
|
<p>Leistungsfähige und sichere Netzwerkstrukturen für Büro oder Zuhause.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Router-, Switch- und WLAN-Setup</li>
|
||||||
|
<li>Optimierung von Reichweite und Performance</li>
|
||||||
|
<li>Segmentierung und Zugriffsregeln</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>IT-Sicherheit & Backup</h3>
|
||||||
|
<p>Schutz Ihrer Daten durch sinnvolle Sicherheits- und Backup-Konzepte.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Sicherheitsprüfung bestehender Systeme</li>
|
||||||
|
<li>Backup-Strategie mit Wiederherstellungstest</li>
|
||||||
|
<li>Absicherung von Endgeräten und Zugriffen</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>Webseiten- & Hosting-Service</h3>
|
||||||
|
<p>Unterstützung rund um Betrieb, Pflege und Optimierung Ihrer Webpräsenz.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Einrichtung und Migration</li>
|
||||||
|
<li>Technische Wartung und Updates</li>
|
||||||
|
<li>Performance- und Sicherheitsoptimierung</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
<article class="product-card glass-card">
|
||||||
|
<h3>Wartung & Betreuung</h3>
|
||||||
|
<p>Kontinuierliche IT-Begleitung für stabile Systeme und weniger Ausfälle.</p>
|
||||||
|
<ul class="product-features">
|
||||||
|
<li>Regelmäßige Systempflege</li>
|
||||||
|
<li>Proaktive Überprüfung kritischer Punkte</li>
|
||||||
|
<li>Planbare Unterstützung im Alltag</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- CTA -->
|
||||||
|
<section class="cta">
|
||||||
|
<div class="container">
|
||||||
|
<div class="cta-content glass-card">
|
||||||
|
<h2>Sie möchten Ihre IT professionell aufstellen?</h2>
|
||||||
|
<p>Stellen Sie jetzt eine unverbindliche Anfrage - ich melde mich zeitnah bei Ihnen.</p>
|
||||||
|
<div class="cta-actions">
|
||||||
|
<a href="/contact" class="btn btn-primary">Unverbindliche Anfrage</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Include footer
|
||||||
|
includeFooter();
|
||||||
|
?>
|
||||||
@@ -1,16 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
require_once __DIR__ . '/../backend/config/products-config.php';
|
||||||
|
|
||||||
|
// Produkt-Daten aus Config laden
|
||||||
|
$product = getProduct('mail-gateway');
|
||||||
|
$packages = getProductPackages('mail-gateway');
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Mail Gateway - Professionelle E-Mail-Lösungen | HexaHost.de';
|
$page_title = $product['page_title'];
|
||||||
$page_description = 'Professionelle Mail Gateway Lösungen für Unternehmen. Spam-Schutz, E-Mail-Archivierung und sichere E-Mail-Kommunikation bei HexaHost.de';
|
$page_description = $product['page_description'];
|
||||||
$current_page = 'mail-gateway';
|
$current_page = 'mail-gateway';
|
||||||
|
|
||||||
// Include header
|
// Include header
|
||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Product Hero -->
|
<!-- Product Hero -->
|
||||||
<section class="product-hero">
|
<section class="product-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -18,37 +23,36 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<?php
|
<?php
|
||||||
generateBreadcrumbs([
|
generateBreadcrumbs([
|
||||||
['title' => 'Home', 'url' => 'index.php'],
|
['title' => 'Home', 'url' => 'index.php'],
|
||||||
['title' => 'Mail Gateway', 'url' => '']
|
['title' => 'Proxmox Mail Gateway', 'url' => '']
|
||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<h1 class="product-hero-title">
|
<h1 class="product-hero-title">
|
||||||
Mail Gateway
|
<?php echo htmlspecialchars($product['name']); ?>
|
||||||
<span class="highlight">für Unternehmen</span>
|
<span class="highlight"><?php echo htmlspecialchars($product['hero_highlight'] ?? ''); ?></span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="product-hero-description">
|
<p class="product-hero-description">
|
||||||
Professionelle E-Mail-Infrastruktur mit maximalem Schutz vor Spam und Malware.
|
<?php echo htmlspecialchars($product['hero_description'] ?? $product['description']); ?>
|
||||||
Sichern Sie Ihre geschäftliche Kommunikation mit unseren Mail Gateway Lösungen.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="product-hero-features">
|
<div class="product-hero-features">
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span>Spam & Virus Schutz</span>
|
<span>Spam- und Virenschutz</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
|
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
|
||||||
<polyline points="22,6 12,13 2,6"/>
|
<polyline points="22,6 12,13 2,6"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span>E-Mail Archivierung</span>
|
<span>Quarantäne-Management</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
|
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
|
||||||
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span>DSGVO-konform</span>
|
<span>Tracking Center & Reporting</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,170 +63,13 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="packages">
|
<section class="packages">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">Mail Gateway Pakete</h2>
|
<h2 class="section-title"><?php echo htmlspecialchars($product['packages_title'] ?? ($product['short_name'] . ' Pakete')); ?></h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Wählen Sie das passende Mail Gateway Paket für Ihr Unternehmen
|
<?php echo htmlspecialchars($product['packages_description'] ?? 'Wählen Sie das passende Paket für Ihre Anforderungen'); ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="packages-grid">
|
<div class="packages-grid">
|
||||||
<!-- Starter Package -->
|
<?php echo renderAllPackages('mail-gateway'); ?>
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Mail Starter</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">4,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Postfächer:</span>
|
|
||||||
<span class="spec-value">5</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Speicher/Postfach:</span>
|
|
||||||
<span class="spec-value">5 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mails/Tag:</span>
|
|
||||||
<span class="spec-value">500</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Spam-Filter</div>
|
|
||||||
<div class="feature">✓ Virus-Schutz</div>
|
|
||||||
<div class="feature">✓ Webmail</div>
|
|
||||||
<div class="feature">✓ IMAP/POP3</div>
|
|
||||||
<div class="feature">✓ SSL/TLS Verschlüsselung</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=mail-starter" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Business Package -->
|
|
||||||
<div class="package-card glass-card featured">
|
|
||||||
<div class="featured-badge">Beliebt</div>
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Mail Business</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">14,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Postfächer:</span>
|
|
||||||
<span class="spec-value">25</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Speicher/Postfach:</span>
|
|
||||||
<span class="spec-value">10 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">3</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mails/Tag:</span>
|
|
||||||
<span class="spec-value">2.000</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Spam-Filter (erweitert)</div>
|
|
||||||
<div class="feature">✓ Virus-Schutz</div>
|
|
||||||
<div class="feature">✓ Webmail</div>
|
|
||||||
<div class="feature">✓ IMAP/POP3</div>
|
|
||||||
<div class="feature">✓ SSL/TLS Verschlüsselung</div>
|
|
||||||
<div class="feature">✓ E-Mail Archivierung (30 Tage)</div>
|
|
||||||
<div class="feature">✓ Kalender & Kontakte</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=mail-business" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Professional Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Mail Professional</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">29,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Postfächer:</span>
|
|
||||||
<span class="spec-value">100</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Speicher/Postfach:</span>
|
|
||||||
<span class="spec-value">25 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">10</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mails/Tag:</span>
|
|
||||||
<span class="spec-value">10.000</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Spam-Filter (KI-gestützt)</div>
|
|
||||||
<div class="feature">✓ Virus-Schutz</div>
|
|
||||||
<div class="feature">✓ Webmail</div>
|
|
||||||
<div class="feature">✓ IMAP/POP3</div>
|
|
||||||
<div class="feature">✓ SSL/TLS Verschlüsselung</div>
|
|
||||||
<div class="feature">✓ E-Mail Archivierung (1 Jahr)</div>
|
|
||||||
<div class="feature">✓ Kalender & Kontakte</div>
|
|
||||||
<div class="feature">✓ ActiveSync für Mobile</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=mail-professional" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Enterprise Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Mail Enterprise</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">59,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Postfächer:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Speicher/Postfach:</span>
|
|
||||||
<span class="spec-value">50 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mails/Tag:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Spam-Filter (KI-gestützt)</div>
|
|
||||||
<div class="feature">✓ Virus-Schutz</div>
|
|
||||||
<div class="feature">✓ Webmail</div>
|
|
||||||
<div class="feature">✓ IMAP/POP3</div>
|
|
||||||
<div class="feature">✓ SSL/TLS Verschlüsselung</div>
|
|
||||||
<div class="feature">✓ E-Mail Archivierung (10 Jahre)</div>
|
|
||||||
<div class="feature">✓ Kalender & Kontakte</div>
|
|
||||||
<div class="feature">✓ ActiveSync für Mobile</div>
|
|
||||||
<div class="feature">✓ Dedizierte IP</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=mail-enterprise" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -243,8 +90,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Spam-Schutz</h3>
|
<h3>Mehrstufiger Spam-Filter</h3>
|
||||||
<p>Mehrstufiger Spam-Filter mit KI-gestützter Erkennung filtert über 99% aller unerwünschten E-Mails zuverlässig heraus.</p>
|
<p>Kombinierte Filtermechanismen reduzieren unerwünschte E-Mails effektiv und schützen Ihre Mailserver zuverlässig.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-card glass-card">
|
<div class="detail-card glass-card">
|
||||||
<div class="detail-icon">
|
<div class="detail-icon">
|
||||||
@@ -253,8 +100,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<path d="M12 6v6l4 2"/>
|
<path d="M12 6v6l4 2"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Virus-Schutz</h3>
|
<h3>Integrierter Virenschutz</h3>
|
||||||
<p>Echtzeit-Virenscanner prüft alle eingehenden und ausgehenden E-Mails auf Schadsoftware und blockiert gefährliche Anhänge.</p>
|
<p>Eingehende und ausgehende Nachrichten werden auf Schadsoftware geprüft, bevor sie Ihr internes Mailsystem erreichen.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-card glass-card">
|
<div class="detail-card glass-card">
|
||||||
<div class="detail-icon">
|
<div class="detail-icon">
|
||||||
@@ -263,8 +110,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>Verschlüsselung</h3>
|
<h3>SMTP-Relay und Regelwerk</h3>
|
||||||
<p>TLS-Verschlüsselung für sichere Übertragung. Optional S/MIME und PGP für Ende-zu-Ende-verschlüsselte Kommunikation.</p>
|
<p>Flexible Transportrichtlinien, Whitelist/Blacklist und Domain-Regeln geben Ihnen volle Kontrolle über den Mailfluss.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-card glass-card">
|
<div class="detail-card glass-card">
|
||||||
<div class="detail-icon">
|
<div class="detail-icon">
|
||||||
@@ -275,8 +122,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<line x1="16" y1="17" x2="8" y2="17"/>
|
<line x1="16" y1="17" x2="8" y2="17"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3>E-Mail Archivierung</h3>
|
<h3>Quarantäne und Tracking Center</h3>
|
||||||
<p>DSGVO-konforme Archivierung aller E-Mails. Revisionssichere Aufbewahrung für rechtliche Anforderungen.</p>
|
<p>Nachvollziehbare Zustellhistorie und komfortables Quarantäne-Management für Administratoren und Endanwender.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -316,8 +163,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="cta">
|
<section class="cta">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="cta-content glass-card">
|
<div class="cta-content glass-card">
|
||||||
<h2>Bereit für professionelle E-Mail-Kommunikation?</h2>
|
<h2><?php echo htmlspecialchars($product['cta_title'] ?? ('Bereit für ' . $product['name'] . '?')); ?></h2>
|
||||||
<p>Starten Sie noch heute mit unserem Mail Gateway</p>
|
<p><?php echo htmlspecialchars($product['cta_description'] ?? ('Starten Sie noch heute mit ' . $product['name'])); ?></p>
|
||||||
<div class="cta-actions">
|
<div class="cta-actions">
|
||||||
<a href="contact.php?product=mail-gateway" class="btn btn-primary">Jetzt bestellen</a>
|
<a href="contact.php?product=mail-gateway" class="btn btn-primary">Jetzt bestellen</a>
|
||||||
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
||||||
|
|||||||
200
public/vpc.php
200
public/vpc.php
@@ -1,16 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
require_once __DIR__ . '/../backend/config/products-config.php';
|
||||||
|
|
||||||
|
// Produkt-Daten aus Config laden
|
||||||
|
$product = getProduct('vpc');
|
||||||
|
$packages = getProductPackages('vpc');
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Virtual Private Container - Effiziente LXC Container | HexaHost.de';
|
$page_title = $product['page_title'];
|
||||||
$page_description = 'Virtual Private Container auf Proxmox LXC-Basis. Effiziente und preiswerte Container-Lösungen ab 4,99€/Monat bei HexaHost.de';
|
$page_description = $product['page_description'];
|
||||||
$current_page = 'vpc';
|
$current_page = 'vpc';
|
||||||
|
|
||||||
// Include header
|
// Include header
|
||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Product Hero -->
|
<!-- Product Hero -->
|
||||||
<section class="product-hero">
|
<section class="product-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -22,13 +27,11 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<h1 class="product-hero-title">
|
<h1 class="product-hero-title">
|
||||||
Virtual Private Container
|
<?php echo htmlspecialchars($product['name']); ?>
|
||||||
<span class="highlight">auf Proxmox LXC</span>
|
<span class="highlight"><?php echo htmlspecialchars($product['hero_highlight'] ?? ''); ?></span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="product-hero-description">
|
<p class="product-hero-description">
|
||||||
Erleben Sie die Effizienz von Linux-Containern mit der Zuverlässigkeit
|
<?php echo htmlspecialchars($product['hero_description'] ?? $product['description']); ?>
|
||||||
von Proxmox. Unsere VPC-Lösungen bieten optimale Performance bei
|
|
||||||
minimalem Ressourcenverbrauch.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="product-hero-features">
|
<div class="product-hero-features">
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
@@ -59,182 +62,13 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="packages">
|
<section class="packages">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">VPC Pakete</h2>
|
<h2 class="section-title"><?php echo htmlspecialchars($product['packages_title'] ?? ($product['short_name'] . ' Pakete')); ?></h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Wählen Sie das perfekte Container-Paket für Ihre Anforderungen
|
<?php echo htmlspecialchars($product['packages_description'] ?? 'Wählen Sie das passende Paket für Ihre Anforderungen'); ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="packages-grid">
|
<div class="packages-grid">
|
||||||
<!-- Starter Package -->
|
<?php echo renderAllPackages('vpc'); ?>
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPC Starter</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">4,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">1 vCore</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">1 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">20 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">1 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox LXC Container</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Backup inklusive</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vpc-starter" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Business Package -->
|
|
||||||
<div class="package-card glass-card featured">
|
|
||||||
<div class="featured-badge">Beliebt</div>
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPC Business</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">9,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">2 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">4 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">80 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">3 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox LXC Container</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Tägliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vpc-business" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Professional Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPC Professional</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">19,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">4 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">8 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">160 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">5 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">2</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox LXC Container</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Stündliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vpc-professional" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Enterprise Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPC Enterprise</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">39,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">8 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">16 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">320 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">10 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">3</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox LXC Container</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Stündliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
<div class="feature">✓ Individuelle Konfiguration</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vpc-enterprise" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -329,8 +163,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="cta">
|
<section class="cta">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="cta-content glass-card">
|
<div class="cta-content glass-card">
|
||||||
<h2>Bereit für Ihren VPC?</h2>
|
<h2><?php echo htmlspecialchars($product['cta_title'] ?? ('Bereit für ' . $product['name'] . '?')); ?></h2>
|
||||||
<p>Starten Sie noch heute mit einem Virtual Private Container</p>
|
<p><?php echo htmlspecialchars($product['cta_description'] ?? ('Starten Sie noch heute mit ' . $product['name'])); ?></p>
|
||||||
<div class="cta-actions">
|
<div class="cta-actions">
|
||||||
<a href="contact.php?product=vpc" class="btn btn-primary">Jetzt bestellen</a>
|
<a href="contact.php?product=vpc" class="btn btn-primary">Jetzt bestellen</a>
|
||||||
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
||||||
|
|||||||
199
public/vps.php
199
public/vps.php
@@ -1,16 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
require_once __DIR__ . '/../backend/config/products-config.php';
|
||||||
|
|
||||||
|
// Produkt-Daten aus Config laden
|
||||||
|
$product = getProduct('vps');
|
||||||
|
$packages = getProductPackages('vps');
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Virtual Private Server - KVM Virtualisierung | HexaHost.de';
|
$page_title = $product['page_title'];
|
||||||
$page_description = 'Virtual Private Server auf Proxmox KVM-Basis. Vollwertige Virtualisierung mit Root-Zugriff ab 9,99€/Monat bei HexaHost.de';
|
$page_description = $product['page_description'];
|
||||||
$current_page = 'vps';
|
$current_page = 'vps';
|
||||||
|
|
||||||
// Include header
|
// Include header
|
||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Product Hero -->
|
<!-- Product Hero -->
|
||||||
<section class="product-hero">
|
<section class="product-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -22,12 +27,11 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<h1 class="product-hero-title">
|
<h1 class="product-hero-title">
|
||||||
Virtual Private Server
|
<?php echo htmlspecialchars($product['name']); ?>
|
||||||
<span class="highlight">auf Proxmox KVM</span>
|
<span class="highlight"><?php echo htmlspecialchars($product['hero_highlight'] ?? ''); ?></span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="product-hero-description">
|
<p class="product-hero-description">
|
||||||
Maximale Flexibilität und Kontrolle mit vollwertiger KVM-Virtualisierung.
|
<?php echo htmlspecialchars($product['hero_description'] ?? $product['description']); ?>
|
||||||
Installieren Sie jedes Betriebssystem und genießen Sie vollständigen Root-Zugriff.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="product-hero-features">
|
<div class="product-hero-features">
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
@@ -63,182 +67,13 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="packages">
|
<section class="packages">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">VPS Pakete</h2>
|
<h2 class="section-title"><?php echo htmlspecialchars($product['packages_title'] ?? ($product['short_name'] . ' Pakete')); ?></h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Wählen Sie das perfekte VPS-Paket für Ihre Anforderungen
|
<?php echo htmlspecialchars($product['packages_description'] ?? 'Wählen Sie das passende Paket für Ihre Anforderungen'); ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="packages-grid">
|
<div class="packages-grid">
|
||||||
<!-- Starter Package -->
|
<?php echo renderAllPackages('vps'); ?>
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPS Starter</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">9,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">1 vCore</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">2 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">40 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">2 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox KVM Virtualisierung</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Backup inklusive</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vps-starter" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Business Package -->
|
|
||||||
<div class="package-card glass-card featured">
|
|
||||||
<div class="featured-badge">Beliebt</div>
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPS Business</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">19,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">2 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">4 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">80 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">4 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox KVM Virtualisierung</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Tägliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vps-business" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Professional Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPS Professional</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">39,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">4 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">8 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">160 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">8 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">2</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox KVM Virtualisierung</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Stündliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vps-professional" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Enterprise Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">VPS Enterprise</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">79,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">CPU Kerne:</span>
|
|
||||||
<span class="spec-value">8 vCores</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">RAM:</span>
|
|
||||||
<span class="spec-value">16 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">SSD Speicher:</span>
|
|
||||||
<span class="spec-value">320 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">15 TB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">IPv4 Adressen:</span>
|
|
||||||
<span class="spec-value">3</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ Proxmox KVM Virtualisierung</div>
|
|
||||||
<div class="feature">✓ Root-Zugriff</div>
|
|
||||||
<div class="feature">✓ SSH-Zugang</div>
|
|
||||||
<div class="feature">✓ Stündliches Backup</div>
|
|
||||||
<div class="feature">✓ 24/7 Monitoring</div>
|
|
||||||
<div class="feature">✓ Snapshot-Funktion</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
<div class="feature">✓ Individuelle Konfiguration</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=vps-enterprise" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -333,8 +168,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="cta">
|
<section class="cta">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="cta-content glass-card">
|
<div class="cta-content glass-card">
|
||||||
<h2>Bereit für Ihren VPS?</h2>
|
<h2><?php echo htmlspecialchars($product['cta_title'] ?? ('Bereit für ' . $product['name'] . '?')); ?></h2>
|
||||||
<p>Starten Sie noch heute mit einem Virtual Private Server</p>
|
<p><?php echo htmlspecialchars($product['cta_description'] ?? ('Starten Sie noch heute mit ' . $product['name'])); ?></p>
|
||||||
<div class="cta-actions">
|
<div class="cta-actions">
|
||||||
<a href="contact.php?product=vps" class="btn btn-primary">Jetzt bestellen</a>
|
<a href="contact.php?product=vps" class="btn btn-primary">Jetzt bestellen</a>
|
||||||
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
||||||
|
|||||||
@@ -1,16 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once 'includes/functions.php';
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
require_once __DIR__ . '/../backend/config/products-config.php';
|
||||||
|
|
||||||
|
// Produkt-Daten aus Config laden
|
||||||
|
$product = getProduct('webhosting');
|
||||||
|
$packages = getProductPackages('webhosting');
|
||||||
|
|
||||||
// Page configuration
|
// Page configuration
|
||||||
$page_title = 'Webhosting - Klassisches Hosting für Websites | HexaHost.de';
|
$page_title = $product['page_title'];
|
||||||
$page_description = 'Webhosting mit PHP, MySQL und SSL-Zertifikaten. Klassisches Hosting für Websites ab 1,99€/Monat bei HexaHost.de';
|
$page_description = $product['page_description'];
|
||||||
$current_page = 'webhosting';
|
$current_page = 'webhosting';
|
||||||
|
|
||||||
// Include header
|
// Include header
|
||||||
includeHeader($page_title, $page_description, $current_page);
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main>
|
<main id="main-content">
|
||||||
<!-- Product Hero -->
|
<!-- Product Hero -->
|
||||||
<section class="product-hero">
|
<section class="product-hero">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -22,12 +27,11 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<h1 class="product-hero-title">
|
<h1 class="product-hero-title">
|
||||||
Webhosting
|
<?php echo htmlspecialchars($product['name']); ?>
|
||||||
<span class="highlight">Alles für Ihre Website</span>
|
<span class="highlight"><?php echo htmlspecialchars($product['hero_highlight'] ?? ''); ?></span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="product-hero-description">
|
<p class="product-hero-description">
|
||||||
Klassisches Webhosting mit allem, was Sie für eine erfolgreiche Website benötigen.
|
<?php echo htmlspecialchars($product['hero_description'] ?? $product['description']); ?>
|
||||||
PHP, MySQL, SSL-Zertifikate und E-Mail-Postfächer - alles inklusive.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="product-hero-features">
|
<div class="product-hero-features">
|
||||||
<div class="hero-feature">
|
<div class="hero-feature">
|
||||||
@@ -60,182 +64,13 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="packages">
|
<section class="packages">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2 class="section-title">Webhosting Pakete</h2>
|
<h2 class="section-title"><?php echo htmlspecialchars($product['packages_title'] ?? ($product['short_name'] . ' Pakete')); ?></h2>
|
||||||
<p class="section-description">
|
<p class="section-description">
|
||||||
Von der ersten Website bis zum professionellen Online-Shop
|
<?php echo htmlspecialchars($product['packages_description'] ?? 'Wählen Sie das passende Paket für Ihre Anforderungen'); ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="packages-grid">
|
<div class="packages-grid">
|
||||||
<!-- Starter Package -->
|
<?php echo renderAllPackages('webhosting'); ?>
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Webhosting Starter</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">1,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Webspace:</span>
|
|
||||||
<span class="spec-value">5 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">1</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mail-Postfächer:</span>
|
|
||||||
<span class="spec-value">5</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Datenbanken:</span>
|
|
||||||
<span class="spec-value">1 MySQL</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">10 GB</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ cPanel/Webmin</div>
|
|
||||||
<div class="feature">✓ PHP 8.1</div>
|
|
||||||
<div class="feature">✓ SSL-Zertifikat</div>
|
|
||||||
<div class="feature">✓ E-Mail-Postfächer</div>
|
|
||||||
<div class="feature">✓ MySQL Datenbank</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=webhosting-starter" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Business Package -->
|
|
||||||
<div class="package-card glass-card featured">
|
|
||||||
<div class="featured-badge">Beliebt</div>
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Webhosting Business</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">4,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Webspace:</span>
|
|
||||||
<span class="spec-value">20 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">5</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mail-Postfächer:</span>
|
|
||||||
<span class="spec-value">25</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Datenbanken:</span>
|
|
||||||
<span class="spec-value">5 MySQL</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">50 GB</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ cPanel/Webmin</div>
|
|
||||||
<div class="feature">✓ PHP 8.1</div>
|
|
||||||
<div class="feature">✓ SSL-Zertifikat</div>
|
|
||||||
<div class="feature">✓ E-Mail-Postfächer</div>
|
|
||||||
<div class="feature">✓ MySQL Datenbanken</div>
|
|
||||||
<div class="feature">✓ Backup-Service</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=webhosting-business" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Professional Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Webhosting Professional</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">9,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Webspace:</span>
|
|
||||||
<span class="spec-value">50 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mail-Postfächer:</span>
|
|
||||||
<span class="spec-value">100</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Datenbanken:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">200 GB</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ cPanel/Webmin</div>
|
|
||||||
<div class="feature">✓ PHP 8.1</div>
|
|
||||||
<div class="feature">✓ SSL-Zertifikat</div>
|
|
||||||
<div class="feature">✓ E-Mail-Postfächer</div>
|
|
||||||
<div class="feature">✓ MySQL Datenbanken</div>
|
|
||||||
<div class="feature">✓ Backup-Service</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=webhosting-professional" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Enterprise Package -->
|
|
||||||
<div class="package-card glass-card">
|
|
||||||
<div class="package-header">
|
|
||||||
<h3 class="package-name">Webhosting Enterprise</h3>
|
|
||||||
<div class="package-price">
|
|
||||||
<span class="price">19,99€</span>
|
|
||||||
<span class="period">/Monat</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-specs">
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Webspace:</span>
|
|
||||||
<span class="spec-value">100 GB</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Domains:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">E-Mail-Postfächer:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Datenbanken:</span>
|
|
||||||
<span class="spec-value">Unbegrenzt</span>
|
|
||||||
</div>
|
|
||||||
<div class="spec-item">
|
|
||||||
<span class="spec-label">Traffic:</span>
|
|
||||||
<span class="spec-value">500 GB</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="package-features">
|
|
||||||
<div class="feature">✓ cPanel/Webmin</div>
|
|
||||||
<div class="feature">✓ PHP 8.1</div>
|
|
||||||
<div class="feature">✓ SSL-Zertifikat</div>
|
|
||||||
<div class="feature">✓ E-Mail-Postfächer</div>
|
|
||||||
<div class="feature">✓ MySQL Datenbanken</div>
|
|
||||||
<div class="feature">✓ Backup-Service</div>
|
|
||||||
<div class="feature">✓ Priority Support</div>
|
|
||||||
<div class="feature">✓ Individuelle Konfiguration</div>
|
|
||||||
</div>
|
|
||||||
<a href="contact.php?package=webhosting-enterprise" class="btn btn-primary">Jetzt bestellen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -332,8 +167,8 @@ includeHeader($page_title, $page_description, $current_page);
|
|||||||
<section class="cta">
|
<section class="cta">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="cta-content glass-card">
|
<div class="cta-content glass-card">
|
||||||
<h2>Bereit für Ihr Webhosting?</h2>
|
<h2><?php echo htmlspecialchars($product['cta_title'] ?? ('Bereit für ' . $product['name'] . '?')); ?></h2>
|
||||||
<p>Starten Sie noch heute mit professionellem Webhosting</p>
|
<p><?php echo htmlspecialchars($product['cta_description'] ?? ('Starten Sie noch heute mit ' . $product['name'])); ?></p>
|
||||||
<div class="cta-actions">
|
<div class="cta-actions">
|
||||||
<a href="contact.php?product=webhosting" class="btn btn-primary">Jetzt bestellen</a>
|
<a href="contact.php?product=webhosting" class="btn btn-primary">Jetzt bestellen</a>
|
||||||
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
<a href="/contact" class="btn btn-secondary">Beratung anfordern</a>
|
||||||
|
|||||||
136
public/widerruf.php
Normal file
136
public/widerruf.php
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
require_once __DIR__ . '/../backend/includes/functions.php';
|
||||||
|
|
||||||
|
// Page configuration
|
||||||
|
$page_title = 'Widerrufsbelehrung - HexaHost.de';
|
||||||
|
$page_description = 'Widerrufsbelehrung und Muster-Widerrufsformular von HexaHost Inh. Samuel Müller.';
|
||||||
|
$current_page = 'widerruf';
|
||||||
|
|
||||||
|
// Include header
|
||||||
|
includeHeader($page_title, $page_description, $current_page);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main id="main-content">
|
||||||
|
<section class="legal-hero">
|
||||||
|
<div class="container">
|
||||||
|
<div class="legal-hero-content">
|
||||||
|
<?php
|
||||||
|
generateBreadcrumbs([
|
||||||
|
['title' => 'Home', 'url' => 'index.php'],
|
||||||
|
['title' => 'Widerrufsbelehrung', 'url' => '']
|
||||||
|
]);
|
||||||
|
?>
|
||||||
|
<h1 class="legal-hero-title">Widerrufsbelehrung</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="legal-content">
|
||||||
|
<div class="container">
|
||||||
|
<div class="legal-container">
|
||||||
|
<div class="legal-section glass-card">
|
||||||
|
<h2>Widerrufsrecht</h2>
|
||||||
|
<div class="legal-block">
|
||||||
|
<p>
|
||||||
|
Verbraucher haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen.
|
||||||
|
Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag des Vertragsschlusses.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Um Ihr Widerrufsrecht auszuüben, müssen Sie uns
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>HexaHost Inh. Samuel Müller</strong><br>
|
||||||
|
Richard-Miller-Straße 1<br>
|
||||||
|
94051 Hauzenberg<br>
|
||||||
|
Deutschland<br>
|
||||||
|
E-Mail: <a href="mailto:info@hexahost.de">info@hexahost.de</a><br>
|
||||||
|
Telefon: +49 15566 175855
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
mittels einer eindeutigen Erklärung (z. B. ein mit der Post versandter Brief oder E-Mail) über Ihren Entschluss,
|
||||||
|
diesen Vertrag zu widerrufen, informieren.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts
|
||||||
|
vor Ablauf der Widerrufsfrist absenden.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="legal-section glass-card">
|
||||||
|
<h2>Folgen des Widerrufs</h2>
|
||||||
|
<div class="legal-block">
|
||||||
|
<p>
|
||||||
|
Wenn Sie diesen Vertrag widerrufen, haben wir Ihnen alle Zahlungen, die wir von Ihnen erhalten haben,
|
||||||
|
unverzüglich und spätestens binnen vierzehn Tagen ab dem Tag zurückzuzahlen, an dem die Mitteilung
|
||||||
|
über Ihren Widerruf bei uns eingegangen ist.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Für diese Rückzahlung verwenden wir dasselbe Zahlungsmittel, das Sie bei der ursprünglichen Transaktion
|
||||||
|
eingesetzt haben, es sei denn, mit Ihnen wurde ausdrücklich etwas anderes vereinbart; in keinem Fall werden
|
||||||
|
Ihnen wegen dieser Rückzahlung Entgelte berechnet.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Haben Sie verlangt, dass die Dienstleistungen während der Widerrufsfrist beginnen sollen, so haben Sie uns
|
||||||
|
einen angemessenen Betrag zu zahlen, der dem Anteil der bis zu dem Zeitpunkt, zu dem Sie uns von der Ausübung
|
||||||
|
des Widerrufsrechts hinsichtlich dieses Vertrags unterrichten, bereits erbrachten Dienstleistungen im Vergleich
|
||||||
|
zum Gesamtumfang der im Vertrag vorgesehenen Dienstleistungen entspricht.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="legal-section glass-card">
|
||||||
|
<h2>Besondere Hinweise zu digitalen Dienstleistungen</h2>
|
||||||
|
<div class="legal-block">
|
||||||
|
<p>
|
||||||
|
Das Widerrufsrecht kann bei Verträgen zur Erbringung von Dienstleistungen vorzeitig erlöschen, wenn wir die
|
||||||
|
Dienstleistung vollständig erbracht haben und mit der Ausführung der Dienstleistung erst begonnen haben,
|
||||||
|
nachdem Sie dazu Ihre ausdrückliche Zustimmung gegeben und gleichzeitig Ihre Kenntnis davon bestätigt haben,
|
||||||
|
dass Sie Ihr Widerrufsrecht bei vollständiger Vertragserfüllung durch uns verlieren.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Bei digitalen Inhalten, die nicht auf einem körperlichen Datenträger geliefert werden, erlischt das
|
||||||
|
Widerrufsrecht, wenn wir mit der Ausführung des Vertrags begonnen haben, nachdem Sie ausdrücklich zugestimmt
|
||||||
|
haben, dass wir vor Ablauf der Widerrufsfrist mit der Ausführung des Vertrags beginnen, und Sie Ihre Kenntnis
|
||||||
|
davon bestätigt haben, dass Sie durch Ihre Zustimmung mit Beginn der Ausführung des Vertrags Ihr Widerrufsrecht verlieren.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="legal-section glass-card">
|
||||||
|
<h2>Muster-Widerrufsformular</h2>
|
||||||
|
<div class="legal-block">
|
||||||
|
<p>
|
||||||
|
(Wenn Sie den Vertrag widerrufen wollen, dann füllen Sie bitte dieses Formular aus und senden Sie es zurück.)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
An:<br>
|
||||||
|
<strong>HexaHost Inh. Samuel Müller</strong><br>
|
||||||
|
Richard-Miller-Straße 1<br>
|
||||||
|
94051 Hauzenberg<br>
|
||||||
|
Deutschland<br>
|
||||||
|
E-Mail: <a href="mailto:info@hexahost.de">info@hexahost.de</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Hiermit widerrufe(n) ich/wir (*) den von mir/uns (*) abgeschlossenen Vertrag über den Kauf der folgenden Waren (*)
|
||||||
|
/ die Erbringung der folgenden Dienstleistung (*)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Bestellt am (*) / erhalten am (*)<br>
|
||||||
|
Name des/der Verbraucher(s)<br>
|
||||||
|
Anschrift des/der Verbraucher(s)<br>
|
||||||
|
Unterschrift des/der Verbraucher(s) (nur bei Mitteilung auf Papier)<br>
|
||||||
|
Datum
|
||||||
|
</p>
|
||||||
|
<p>(*) Unzutreffendes streichen.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Include footer
|
||||||
|
includeFooter();
|
||||||
|
?>
|
||||||
Reference in New Issue
Block a user