PHP router auf subdomain?
Hallo.
Ich habe folgendes Problem, dass mein Router auf meiner Subdomain (All-Inkl) nicht funktioniert. Er funktioniert Localhost und auch auf der Domain. (Fehler Code kommt keiner - außer ich bin auf einer Unterseite zB /skills und der Server sagt: Not Found)
The requested URL was not found on this server.
Danke im voraus.
<?php
//URL abfragen
$url = $_SERVER['REQUEST_URI'];
//Datei zu URL finden
$pages = match ($url) {
'' => 'home.php',
'/' => 'home.php',
'kontakt' => 'kontakt.php',
'uebermich' => 'uebermich.php',
'skills' => 'skills.php',
'projekte' => 'projekte.php',
'gesendet' => 'gesendet.php',
default => 'home.php'
};
//Datei einfügen
require 'pages/' . $pages;
3 Antworten
Hast du dir denn mal ausgeben lassen, was in $_SERVER['REQUEST_URI'] drin steht? Ich vermute mal, dass dort der Slash noch mit drin ist und dann /kontakt statt kontakt in $url ist.
Du hast also gar keine .htaccess mit passenden Rewrite-Regeln? Dann kann das nicht funktionieren.
Er funktioniert Localhost
Damit hat nur dein Router nichts am Hut. Localhost wird bereits im Rechner über einen virtuellen Loopbackadapter abgefangen und gelangt gar nicht an den Router.
Ich habe folgendes Problem, dass mein Router auf meiner Subdomain (All-Inkl) nicht funktioniert.
Hier ist auch nicht dein Router verantwortlich, sondern vielmehr die Einstellungen des Servers - und die wahrscheinlichste Ursache dürfte hier sein, dass irgendwo in deinem Code ein Fehler liegt, der auf eine nicht existierende Datei verweist. Sonst hättest du als Fehlermeldung nicht "not found", sondern eher etwas wie "kann den Server nicht erreichen/nicht finden"....
Ich habe meine require & include_once gerade kontrolliert und die passen alle und die Dateien existieren auch
Hast du die .htaccess Datei konfiguriert? In der musst du einstellen, dass er index.php nicht verlassen darf. Sonst bekommt index.php nie die Werte hinter der URL, weil er eine andere PHP Seite aufrufen will
In meiner .htaccess steht nur:
<IfModule mod_expires.c>
ExpiresActive On
# img
ExpiresByType assets/img/jpg "access plus 1 week"
ExpiresByType assets/img/png "access plus 1 week"
ExpiresByType assets/img/svg "access plus 1 week"
# Fonts
ExpiresByType assets/font/woff2 "access plus 1 week"
ExpiresByType assets/font/woff "access plus 1 week"
# CSS, JavaScript
ExpiresByType style/css "access plus 1 week"
ExpiresByType js/js "access plus 1 week"
</IfModule>
Wie kann ich ihm das sagen?
Ich habe das jetzt ergänzt und es ändert sich garnichts:
<FilesMatch "^(index\.php)$">
ExpiresDefault "access plus 0 seconds"
Header set Cache-Control "private, no-store, no-cache, must-revalidate"
Header set Pragma "no-cache"
</FilesMatch>
Du machst sagst ja auch nur, wenn index match, dann das und das. Aber index matched ja nicht bei einer anderen Unterseite
Du musst auf die index umleiten.
Musste gerade bei mir schauen. Ich mache es so:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(?!.*index\.html$).*$ /index.html [L]
Wenn nicht index, leite zu index. Grund warum nur bei nicht index: Bei index ist er schon bei index und er soll keinen loop erzeugen
Ich habe es es auf das geändert
<IfModule mod_expires.c>
ExpiresActive On
# img
ExpiresByType assets/img/jpg "access plus 1 week"
ExpiresByType assets/img/png "access plus 1 week"
ExpiresByType assets/img/svg "access plus 1 week"
# Fonts
ExpiresByType assets/font/woff2 "access plus 1 week"
ExpiresByType assets/font/woff "access plus 1 week"
# CSS, JavaScript
ExpiresByType style/css "access plus 1 week"
ExpiresByType js/js "access plus 1 week"
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(?!.*index\.html$).*$
</IfModule>
Der Server sagt:
Interner Serverfehler
Auf dem Server ist ein interner Fehler aufgetreten oder Fehlkonfiguration und konnte nicht abgeschlossen werden Ihre Anfrage.
Bitte wenden Sie sich an den Serveradministrator unter ##### sie über den Zeitpunkt des Auftretens dieses Fehlers zu informieren, und die Aktionen, die Sie kurz vor diesem Fehler ausgeführt haben.
Weitere Informationen zu diesem Fehler sind möglicherweise verfügbar im Server-Fehlerprotokoll.
Nimm es aus dem IfModule raus. Ich bin kein htaccess Experte, dadurch muss ich selber gerade etwas raten, aber eventuell liegt es daran.
Der Fehler bleibt:
<IfModule mod_expires.c>
ExpiresActive On
# img
ExpiresByType assets/img/jpg "access plus 1 week"
ExpiresByType assets/img/png "access plus 1 week"
ExpiresByType assets/img/svg "access plus 1 week"
# Fonts
ExpiresByType assets/font/woff2 "access plus 1 week"
ExpiresByType assets/font/woff "access plus 1 week"
# CSS, JavaScript
ExpiresByType style/css "access plus 1 week"
ExpiresByType js/js "access plus 1 week"
</IfModule>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(?!.*index\.html$).*$
Ah, sehe ich jetzt erst. Du hast scheinbar meinen htaccess Code zu schnell abgegriffen. Hatte den vorhin korrigiert, weil ich einen Fehler gemacht hatte. Kopier den nochmal neu von mir da oben
Danke, habe es jetzt mit deiner Hilfe und Chat GPT geschafft:
<IfModule mod_expires.c>
ExpiresActive On
# img
ExpiresByType assets/img/jpg "access plus 1 week"
ExpiresByType assets/img/png "access plus 1 week"
ExpiresByType assets/img/svg "access plus 1 week"
# Fonts
ExpiresByType assets/font/woff2 "access plus 1 week"
ExpiresByType assets/font/woff "access plus 1 week"
# CSS, JavaScript
ExpiresByType style/css "access plus 1 week"
ExpiresByType js/js "access plus 1 week"
</IfModule>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^ index.php [L]
Ja, dass was ich sagte :) ... das hat ChatGPT für dich korrigiert. Allerdings suchst du nach ^, also Anfang. Somit müsste der eigentlich immer triggern und in einen loop gehen oder habe ich einen Denkfehler? Deshalb hat mein Code mehr da stehen, um loops zu vermeiden
RewriteRule ^(?!.*index\.html$).*$ /index.html [L]
Er zeigt mir '/' an und wenn ich dann /projekte oder einen anderen Link aufrufe verlasse ich anscheinend die index.php, da er mir die uri nicht mehr ausgibt