Compare commits

...

2 Commits

22 changed files with 72 additions and 271 deletions

View File

@@ -10,9 +10,6 @@
* $packages = getProductPackages('vpc');
*/
// Temporär ausgeblendete Produkte (einfach IDs aus dieser Liste entfernen, um sie wieder im Shop anzuzeigen)
$HIDDEN_PRODUCTS = ['vpc', 'vps'];
// ============================================================================
// VIRTUAL PRIVATE CONTAINER (VPC)
// ============================================================================
@@ -268,6 +265,8 @@ $PRODUCTS['mail-gateway'] = [
'Webmail',
'IMAP/POP3',
'SSL/TLS Verschlüsselung',
'E-Mail Archivierung (30 Tage)',
'Kalender & Kontakte',
],
],
'professional' => [
@@ -286,6 +285,9 @@ $PRODUCTS['mail-gateway'] = [
'Webmail',
'IMAP/POP3',
'SSL/TLS Verschlüsselung',
'E-Mail Archivierung (1 Jahr)',
'Kalender & Kontakte',
'ActiveSync für Mobile',
],
],
'enterprise' => [
@@ -304,6 +306,9 @@ $PRODUCTS['mail-gateway'] = [
'Webmail',
'IMAP/POP3',
'SSL/TLS Verschlüsselung',
'E-Mail Archivierung (10 Jahre)',
'Kalender & Kontakte',
'ActiveSync für Mobile',
'Dedizierte IP',
'Priority Support',
],
@@ -317,56 +322,50 @@ $PRODUCTS['mail-gateway'] = [
$PRODUCTS['webhosting'] = [
'name' => 'Webhosting',
'short_name' => 'Webhosting',
'description' => 'Klassisches Hosting mit PHP, MySQL und SSL. WordPress-ready mit Plesk Webhosting.',
'min_price' => '2,99',
'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 - WordPress-ready | HexaHost.de',
'page_description' => 'Webhosting mit PHP, MySQL und SSL-Zertifikaten. Klassisches Hosting für Websites - WordPress-ready ab 2,99€/Monat bei HexaHost.de',
'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' => '2,99',
'price' => '1,99',
'featured' => false,
'specs' => [
['label' => 'Webspace', 'value' => '10 GB'],
['label' => 'Webspace', 'value' => '5 GB'],
['label' => 'Domains', 'value' => '1'],
['label' => 'Subdomains', 'value' => '5'],
['label' => 'Domain Aliase', 'value' => '2'],
['label' => 'E-Mail-Postfächer', 'value' => '10'],
['label' => 'Datenbanken', 'value' => '2 MySQL'],
['label' => 'Traffic', 'value' => '100 GB'],
['label' => 'E-Mail-Postfächer', 'value' => '5'],
['label' => 'Datenbanken', 'value' => '1 MySQL'],
['label' => 'Traffic', 'value' => '10 GB'],
],
'features' => [
'Plesk Webhosting',
'PHP 8.4',
'Git, WP Toolkit, Composer',
'cPanel/Webmin',
'PHP 8.1',
'SSL-Zertifikat',
'E-Mail-Postfächer',
'MySQL Datenbanken',
'MySQL Datenbank',
],
],
'business' => [
'name' => 'Webhosting Business',
'price' => '7,99',
'price' => '4,99',
'featured' => true,
'specs' => [
['label' => 'Webspace', 'value' => '30 GB'],
['label' => 'Domains Inkl.', 'value' => '1'],
['label' => 'Subdomains', 'value' => '10'],
['label' => 'Domain Aliase', 'value' => '2'],
['label' => 'E-Mail-Postfächer', 'value' => '20'],
['label' => 'Webspace', 'value' => '20 GB'],
['label' => 'Domains', 'value' => '5'],
['label' => 'E-Mail-Postfächer', 'value' => '25'],
['label' => 'Datenbanken', 'value' => '5 MySQL'],
['label' => 'Traffic', 'value' => '100 GB'],
['label' => 'Traffic', 'value' => '50 GB'],
],
'features' => [
'Plesk Webhosting',
'PHP 8.4',
'Git, WP Toolkit, Composer',
'cPanel/Webmin',
'PHP 8.1',
'SSL-Zertifikat',
'E-Mail-Postfächer',
'MySQL Datenbanken',
@@ -375,21 +374,18 @@ $PRODUCTS['webhosting'] = [
],
'professional' => [
'name' => 'Webhosting Professional',
'price' => '13,99',
'price' => '9,99',
'featured' => false,
'specs' => [
['label' => 'Webspace', 'value' => '50 GB'],
['label' => 'Domains Inkl.', 'value' => '1'],
['label' => 'Subdomains', 'value' => 'unbegrenzt'],
['label' => 'Domain Aliase', 'value' => 'unbegrenzt'],
['label' => 'E-Mail-Postfächer', 'value' => '20'],
['label' => 'Datenbanken', 'value' => '20 MySQL'],
['label' => 'Traffic', 'value' => '100 GB'],
['label' => 'Domains', 'value' => 'Unbegrenzt'],
['label' => 'E-Mail-Postfächer', 'value' => '100'],
['label' => 'Datenbanken', 'value' => 'Unbegrenzt'],
['label' => 'Traffic', 'value' => '200 GB'],
],
'features' => [
'Plesk Webhosting',
'PHP 8.4',
'Git, WP Toolkit, Composer',
'cPanel/Webmin',
'PHP 8.1',
'SSL-Zertifikat',
'E-Mail-Postfächer',
'MySQL Datenbanken',
@@ -403,17 +399,14 @@ $PRODUCTS['webhosting'] = [
'featured' => false,
'specs' => [
['label' => 'Webspace', 'value' => '100 GB'],
['label' => 'Domains Inkl.', 'value' => '3'],
['label' => 'Subdomains', 'value' => 'unbegrenzt'],
['label' => 'Domain Aliase', 'value' => 'unbegrenzt'],
['label' => 'E-Mail-Postfächer', 'value' => '100'],
['label' => 'Domains', 'value' => 'Unbegrenzt'],
['label' => 'E-Mail-Postfächer', 'value' => 'Unbegrenzt'],
['label' => 'Datenbanken', 'value' => 'Unbegrenzt'],
['label' => 'Traffic', 'value' => '1 TB'],
['label' => 'Traffic', 'value' => '500 GB'],
],
'features' => [
'Plesk Webhosting',
'PHP 8.4',
'Git, WP Toolkit, Composer',
'cPanel/Webmin',
'PHP 8.1',
'SSL-Zertifikat',
'E-Mail-Postfächer',
'MySQL Datenbanken',
@@ -445,14 +438,6 @@ function getProduct($productId) {
return $PRODUCTS[$productId] ?? null;
}
/**
* Prüft, ob ein Produkt im Shop angezeigt werden soll
*/
function isProductVisible($productId) {
global $HIDDEN_PRODUCTS;
return !in_array($productId, $HIDDEN_PRODUCTS, true);
}
/**
* Alle Pakete eines Produkts abrufen
*/

View File

@@ -1,68 +0,0 @@
<?php
/**
* HexaHost.de zentrale Domain- und Umgebungskonfiguration
*/
define('SITE_DOMAIN_PRODUCTION', 'hexahost.de');
define('SITE_DOMAIN_DEVELOPMENT', 'dev.hexahost.de');
/**
* Aktuellen HTTP-Host (ohne Port) ermitteln
*/
function getSiteHost(): string
{
$host = $_SERVER['HTTP_HOST'] ?? SITE_DOMAIN_PRODUCTION;
$host = strtolower($host);
if (str_contains($host, ':')) {
$host = explode(':', $host, 2)[0];
}
return $host;
}
/**
* true, wenn die Seite unter der Dev-Domain läuft
*/
function isDevelopmentSite(): bool
{
return getSiteHost() === SITE_DOMAIN_DEVELOPMENT;
}
/**
* Basis-URL der aktuellen Anfrage (Schema + Host)
*/
function getSiteBaseUrl(): string
{
$https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['SERVER_PORT']) && (int) $_SERVER['SERVER_PORT'] === 443);
$scheme = $https ? 'https' : 'http';
return $scheme . '://' . getSiteHost();
}
/**
* Erlaubte CORS-Origins für AJAX (Kontaktformular)
*
* @return list<string>
*/
function getAllowedOrigins(): array
{
return [
'https://' . SITE_DOMAIN_PRODUCTION,
'https://www.' . SITE_DOMAIN_PRODUCTION,
'https://' . SITE_DOMAIN_DEVELOPMENT,
'http://localhost',
'http://127.0.0.1',
'http://localhost:8000',
];
}
/**
* Kanonische Basis-URL für SEO (Produktion immer hexahost.de)
*/
function getCanonicalBaseUrl(): string
{
return 'https://' . SITE_DOMAIN_PRODUCTION;
}

View File

@@ -3,12 +3,6 @@
* Helper functions for HexaHost.de
*/
$configDir = defined('HEXAHOST_CONFIG_DIR')
? HEXAHOST_CONFIG_DIR
: __DIR__ . '/../config';
require_once $configDir . '/site-config.php';
// Sichere Session-Konfiguration
if (session_status() === PHP_SESSION_NONE) {
// Session-Cookie-Sicherheit
@@ -57,11 +51,6 @@ function includeHeader($title = '', $description = '', $page = '', $scripts = []
$current_page = $page;
$additional_scripts = $scripts;
if (!isset($canonical_url)) {
$requestPath = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH) ?: '/';
$canonical_url = rtrim(getCanonicalBaseUrl(), '/') . $requestPath;
}
include __DIR__ . '/header.php';
}

View File

@@ -1,8 +1,4 @@
<!DOCTYPE html>
<?php
$configDir = defined('HEXAHOST_CONFIG_DIR') ? HEXAHOST_CONFIG_DIR : __DIR__ . '/../config';
require_once $configDir . '/products-config.php';
?>
<html lang="de">
<head>
<meta charset="UTF-8">
@@ -65,12 +61,8 @@ require_once $configDir . '/products-config.php';
<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">
<?php if (isProductVisible('vpc')): ?>
<li><a href="/vpc" class="<?php echo ($current_page === 'vpc') ? 'active' : ''; ?>">Virtual Private Container</a></li>
<?php endif; ?>
<?php if (isProductVisible('vps')): ?>
<li><a href="/vps" class="<?php echo ($current_page === 'vps') ? 'active' : ''; ?>">Virtual Private Server</a></li>
<?php endif; ?>
<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>

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = '404 - Seite nicht gefunden | HexaHost.de';

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = '500 - Serverfehler | HexaHost.de';

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Über mich - HexaHost.de | Hosting aus Niederbayern';

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Allgemeine Geschäftsbedingungen - HexaHost.de | AGB';

View File

@@ -15,52 +15,3 @@
justify-content: center;
margin-top: 2rem;
}
/* IT-Dienstleistungen auf Startseite: ausgewogenes 3x2-Grid */
.it-services-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
max-width: 980px;
margin-left: auto;
margin-right: auto;
}
.it-services-grid .feature-item {
height: 100%;
}
@media (max-width: 1024px) {
.it-services-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 640px) {
.it-services-grid {
grid-template-columns: 1fr;
}
}
/* Animierter Farbverlauf für "Beliebt"-Badge */
.featured-badge {
background: linear-gradient(135deg, #ff51f9 0%, #a348ff 50%, #3978ff 100%);
background-size: 220% 220%;
animation: featured-badge-colors 6s ease infinite;
}
@keyframes featured-badge-colors {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
@media (prefers-reduced-motion: reduce) {
.featured-badge {
animation: none;
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,41 +0,0 @@
<?php
/**
* HexaHost Bootstrap für Monorepo- und Produktions-Layout
*
* Monorepo: public/../backend/{includes,config}
* Produktion: public/{includes,config} (nach Backend-Kopie)
*/
if (!defined('HEXAHOST_BOOTSTRAPPED')) {
$pathCandidates = [
[
'includes' => __DIR__ . '/includes',
'config' => __DIR__ . '/config',
],
[
'includes' => __DIR__ . '/../backend/includes',
'config' => __DIR__ . '/../backend/config',
],
];
$resolved = false;
foreach ($pathCandidates as $paths) {
if (is_file($paths['includes'] . '/functions.php')) {
define('HEXAHOST_INCLUDES_DIR', $paths['includes']);
define('HEXAHOST_CONFIG_DIR', $paths['config']);
require_once $paths['includes'] . '/functions.php';
$resolved = true;
break;
}
}
if (!$resolved) {
http_response_code(500);
header('Content-Type: text/plain; charset=utf-8');
echo 'HexaHost: Anwendung konnte nicht gestartet werden (includes nicht gefunden).';
exit;
}
define('HEXAHOST_BOOTSTRAPPED', true);
}

View File

@@ -9,10 +9,8 @@ if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once __DIR__ . '/bootstrap.php';
$configDir = defined('HEXAHOST_CONFIG_DIR') ? HEXAHOST_CONFIG_DIR : __DIR__ . '/config';
require_once $configDir . '/mail-config.php';
// Konfiguration laden
require_once 'config/mail-config.php';
// PHPMailer Autoload (falls via Composer installiert)
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
@@ -45,8 +43,13 @@ function validateCSRFToken($token) {
return false;
}
// CORS Headers für AJAX-Requests (nur eigene Domains erlauben)
$allowed_origins = getAllowedOrigins();
// CORS Headers für AJAX-Requests (nur eigene Domain erlauben)
$allowed_origins = [
'https://hexahost.de',
'https://www.hexahost.de',
'http://localhost', // Für Entwicklung
'http://127.0.0.1' // Für Entwicklung
];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed_origins)) {

View File

@@ -1,6 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Kontakt - HexaHost.de | Hosting aus Niederbayern';
@@ -131,12 +130,8 @@ includeHeader($page_title, $page_description, $current_page, $additional_scripts
<select id="subject" name="subject" required>
<option value="">Bitte wählen...</option>
<option value="allgemeine-anfrage">Allgemeine Anfrage</option>
<?php if (isProductVisible('vpc')): ?>
<option value="vpc-anfrage">Virtual Private Container</option>
<?php endif; ?>
<?php if (isProductVisible('vps')): ?>
<option value="vps-anfrage">Virtual Private Server</option>
<?php endif; ?>
<option value="mail-gateway-anfrage">Mail Gateway</option>
<option value="webhosting-anfrage">Webhosting</option>
<option value="it-beratung">IT-Beratung</option>

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Datenschutzerklärung - HexaHost.de | Datenschutz';

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Impressum - HexaHost.de | Rechtliche Angaben';
@@ -23,7 +23,7 @@ includeHeader($page_title, $page_description, $current_page);
?>
<h1 class="legal-hero-title">Impressum</h1>
<p class="legal-hero-description">
Rechtliche Angaben und Pflichtinformationen gemäß § 5 DDG
</p>
</div>
</div>

View File

@@ -1,6 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'HexaHost.de - Zuverlässiges Hosting aus Niederbayern';
@@ -55,7 +54,6 @@ includeHeader($page_title, $page_description, $current_page);
</p>
</div>
<div class="products-grid">
<?php if (isProductVisible('vpc')): ?>
<div class="product-card glass-card">
<div class="product-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -76,8 +74,6 @@ includeHeader($page_title, $page_description, $current_page);
</ul>
<a href="/vpc" class="btn btn-primary">Mehr erfahren</a>
</div>
<?php endif; ?>
<?php if (isProductVisible('vps')): ?>
<div class="product-card glass-card">
<div class="product-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -96,7 +92,6 @@ includeHeader($page_title, $page_description, $current_page);
</ul>
<a href="/vps" class="btn btn-primary">Mehr erfahren</a>
</div>
<?php endif; ?>
<div class="product-card glass-card">
<div class="product-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -156,7 +151,7 @@ includeHeader($page_title, $page_description, $current_page);
</section>
<!-- IT Services Section -->
<section class="features 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>
@@ -164,7 +159,7 @@ includeHeader($page_title, $page_description, $current_page);
Ergänzend zu unseren Hosting-Angeboten unterstützen wir Sie mit persönlicher IT-Betreuung.
</p>
</div>
<div class="features-grid it-services-grid">
<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>

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'IT-Dienstleistungen - HexaHost.de | Privat & Gewerblich';

View File

@@ -1,6 +1,6 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.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');

View File

@@ -1,6 +1,6 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.php';
require_once __DIR__ . '/../backend/includes/functions.php';
require_once __DIR__ . '/../backend/config/products-config.php';
// Produkt-Daten aus Config laden
$product = getProduct('vpc');

View File

@@ -1,6 +1,6 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.php';
require_once __DIR__ . '/../backend/includes/functions.php';
require_once __DIR__ . '/../backend/config/products-config.php';
// Produkt-Daten aus Config laden
$product = getProduct('vps');

View File

@@ -1,6 +1,6 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once HEXAHOST_CONFIG_DIR . '/products-config.php';
require_once __DIR__ . '/../backend/includes/functions.php';
require_once __DIR__ . '/../backend/config/products-config.php';
// Produkt-Daten aus Config laden
$product = getProduct('webhosting');
@@ -95,8 +95,8 @@ includeHeader($page_title, $page_description, $current_page);
<polyline points="10,9 9,9 8,9"/>
</svg>
</div>
<h3>Plesk Webhosting</h3>
<p>Plesk Webhosting ist eine benutzerfreundliche Verwaltungsoberfläche für einfache Website-Verwaltung und E-Mail-Konfiguration.</p>
<h3>cPanel/Webmin</h3>
<p>Benutzerfreundliche Verwaltungsoberfläche für einfache Website-Verwaltung und E-Mail-Konfiguration.</p>
</div>
<div class="detail-card glass-card">
<div class="detail-icon">

View File

@@ -1,5 +1,5 @@
<?php
require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/../backend/includes/functions.php';
// Page configuration
$page_title = 'Widerrufsbelehrung - HexaHost.de';