diff --git a/.gitignore b/.gitignore index 60f20b1..68182b7 100644 --- a/.gitignore +++ b/.gitignore @@ -27,10 +27,6 @@ # pro Umgebung unterschiedlich und darf nicht öffentlich einsehbar sein /hifi/api/config/setup.php -# Wird nur im IONOS-Deploy-Now-Build-Schritt geschrieben (Root-Domain statt /hifi), -# lokal nicht vorhanden -> Fallback in config.php greift dann -/hifi/api/config/base_path.php - # Claude-Code-Tooling (Skills/lokale Einstellungen) - gehört nicht zum Website-Projekt /hifi/.claude/ /hifi/.agents/ diff --git a/hifi-src/vite.config.js b/hifi-src/vite.config.js index 503ce19..7fd2e23 100644 --- a/hifi-src/vite.config.js +++ b/hifi-src/vite.config.js @@ -1,22 +1,17 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; -// Lokal (XAMPP) läuft die Seite unter /hifi/, auf IONOS Deploy Now unter der -// Domain-Wurzel. VITE_BASE_PATH wird nur im CI-Build-Schritt auf "/" gesetzt, -// lokal bleibt der Default unverändert. -const base = process.env.VITE_BASE_PATH || '/hifi/'; - export default defineConfig({ plugins: [react()], - base, + base: '/', build: { outDir: '../hifi', emptyOutDir: false, }, server: { proxy: { - '/hifi/api': { - target: 'http://localhost', + '/api': { + target: 'http://localhost:8080', changeOrigin: true, }, }, diff --git a/hifi/.htaccess b/hifi/.htaccess index 61ed5f7..7f3bdef 100644 --- a/hifi/.htaccess +++ b/hifi/.htaccess @@ -1,11 +1,8 @@ -# Für die lokale XAMPP-Entwicklung (Seite liegt unter /hifi/). Die Root-Domain- -# Variante für den IONOS-Deploy-Now-Build liegt in .htaccess.ionos und wird dort -# beim Bauen automatisch anstelle dieser Datei verwendet. RewriteEngine On -RewriteBase /hifi/ +RewriteBase / # API-Requests an den PHP-Front-Controller weiterleiten -RewriteCond %{REQUEST_URI} ^/hifi/api/ +RewriteCond %{REQUEST_URI} ^/api/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^api/(.*)$ api/public/index.php [QSA,L] diff --git a/hifi/.htaccess.ionos b/hifi/.htaccess.ionos deleted file mode 100644 index 7f3bdef..0000000 --- a/hifi/.htaccess.ionos +++ /dev/null @@ -1,15 +0,0 @@ -RewriteEngine On -RewriteBase / - -# API-Requests an den PHP-Front-Controller weiterleiten -RewriteCond %{REQUEST_URI} ^/api/ -RewriteCond %{REQUEST_FILENAME} !-f -RewriteRule ^api/(.*)$ api/public/index.php [QSA,L] - -# Dynamische sitemap.xml (DB-generiert) -RewriteRule ^sitemap\.xml$ api/public/sitemap.php [L] - -# Alles andere: SPA-Fallback auf index.html (React Router übernimmt das Routing) -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^ index.html [QSA,L] diff --git a/hifi/api/config/config.php b/hifi/api/config/config.php index a4ad324..70f4bcf 100644 --- a/hifi/api/config/config.php +++ b/hifi/api/config/config.php @@ -24,10 +24,9 @@ return [ 'to_email' => 'kontakt@example.com', ], 'app' => [ - // Muss zum Vite "base" passen und wird für Session-Cookie-Pfad und Upload-URLs - // genutzt. Lokal (XAMPP) ist das /hifi, im IONOS-Deploy-Now-Build wird beim - // Bauen eine base_path.php mit '/' geschrieben (siehe .github Workflow). - 'base_path' => is_file(__DIR__ . '/base_path.php') ? require __DIR__ . '/base_path.php' : '/hifi', + // Läuft überall (lokal wie live) unter der Domain-Wurzel. Muss zum Vite + // "base" passen und wird für Session-Cookie-Pfad und Upload-URLs genutzt. + 'base_path' => '/', 'session_name' => 'hifi_admin_session', // Öffentliche Domain der Seite (für sitemap.xml, robots.txt, Canonical-URLs). Ohne abschließenden Slash. 'site_url' => 'https://hifi-planet.de', diff --git a/hifi/api/public/index.php b/hifi/api/public/index.php index 9def0c1..53ebaeb 100644 --- a/hifi/api/public/index.php +++ b/hifi/api/public/index.php @@ -41,7 +41,7 @@ if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') { session_name($config['app']['session_name']); session_set_cookie_params([ - 'path' => $config['app']['base_path'] . '/', + 'path' => rtrim($config['app']['base_path'], '/') . '/', 'httponly' => true, 'samesite' => 'Lax', ]); @@ -160,7 +160,7 @@ $router->post('/setup/migrate', fn($p) => SetupController::migrateSchema()); $router->post('/setup/admin', fn($p) => SetupController::createAdmin()); $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); -$apiBase = $config['app']['base_path'] . '/api'; +$apiBase = rtrim($config['app']['base_path'], '/') . '/api'; $route = '/' . ltrim(substr($path, strlen($apiBase)), '/'); header('Content-Type: application/json; charset=utf-8');