Zur Navigation

URL's dem DB-Inhalt zuordnen

1 Johnny (Gast)

Ich habe durch längere Recherche leider bisher keine Lösung dafür, meine in der DB abgelegten html-Inhalte entsprechend der URL anzuzeigen.

Unter weblokal.net/ wird die index.php aufgerufen, in der lediglich die ID der jeweiligen Seite aus der DB ermittelt wird, also so wie das bei Joomla und Wordpress auch passiert.
Wenn ich auf andere Seiten navigiere, wird auch richtig z.B. die URL weblokal.net/profile.php aufgerufen, allerdings wird dennoch nur der Inhalt der index, nicht der profile angezeigt.

Hat jemand eine Idee, ob das in der htaccess z.B. mit query Strings eingestellt werden muss?

Wenn jemand die aktuelle htaccess sehen möchte, poste ich die natürlich

Dank für jeden Hinweis!

15.02.2018 16:10

2 Jörg Kruse

Ja, poste mal den Inhalt der .htaccess Datei.

Wenn unter weblokal.net/profile.php der Inhalt der index.php angezeigt wird, könnte dies an einem (ungewollten) Rewrite in der .htaccess Datei liegen.

15.02.2018 16:49

3 John821

Hier die htaccess, mit der die index.php und damit alle Startseiteninhalte aus der DB richtig ausgegeben werden, aber beim Aufruf der Seiten weblokal.net/references.php oder weblokal.net/profil.php nicht diese Inhalte aus der DB geholt werden, sondern wieder nur die Startseite angezeigt wird


RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L]

15.02.2018 18:33

4 Jörg Kruse

Eigentlich sollte diese Zeile verhindern, dass profil.php auf die index.php rewritet wird:

RewriteCond %{REQUEST_FILENAME} !-f

profil.php ist eine reale Datei, die wie die index.php im Wurzelverzeichnis von weblokal.net liegt?

Edit:

hast du eine robots.txt Datei im Wurzelverzeichnis liegen? weblokal.net/robots.txt zeigt auch nur die Startseite an

15.02.2018 19:26 | geändert: 15.02.2018 19:29

5 John821

danke erstmal!

Nein eine robots.txt ist noch nicht im root.
Im Wurzelverzeichnis liegt nur die index.php, alle Webseiteninhalte liegen in der DB. Wie bei Joomla od Wordpress werden über die index.php nur die ID´s der Seiten ausgelesen und ausgegeben.
Das klappt lokal unter Xampp auch genau wie es soll, nur auf dem Live Server nicht.

Kann es sein, dass die 4. Zeile

RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L]

falsch geschrieben ist?

15.02.2018 19:40 | geändert: 15.02.2018 19:46

6 Jörg Kruse

OK, dann ist es gewollt, dass der (virtuelle) Dateiname profil.php rewritet wird.

index.php/$1?%{QUERY_STRING}

Der Pfad wird hier mit einem Slash an die index.php angehängt. Der Webserver übermittelt diesen Pfad an die index.php, welche ihn dann als $_SERVER['PATH_INFO'] auswerten kann, wenn AcceptPathInfo aktiviert ist. Vielleicht ist diese Funktion auf dem Server deaktiviert.

Probier mal in der .htaccess Datei:

AcceptPathInfo On

Je nach Server-Konfiguration muss der Webhoster die Funktion freischalten

15.02.2018 20:06 | geändert: 15.02.2018 20:07

7 John821

So hab ich es geschrieben:

RewriteEngine On
AcceptPathInfo On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L]

Da passiert leider noch nichts erfolgreiches. Ist die Reihenfolge richtig?
Wegen der AcceptPathInfo Funktion frag ich jetzt meinen Hoster mal an, danke für den Hinweis

15.02.2018 20:41

8 Jörg Kruse

Das sollte so gehen - wobei ich aber der Übersicht halber die AcceptPathInfo-Drirektive ganz nach oben stellen würde, damit die Rewrite-Direktiven zusammenstehen.

15.02.2018 21:26

9 John821

Hallo Jörg,
danke für die bisherige Hilfe.

Hab gerade mit dem Hosteurope Support gesprochen, die AcceptPathInfo ist definitiv aktiviert.

Kann es vllt an dem Array $_SERVER['REQUEST_URI'] liegen?
Darüber hole ich in der index.php die URL. Du hattest von $_SERVER['PATH_INFO'] aber darüber erhalte ich keinen Pfad, deswegen verwende ich auch weiterhin das erste Array

15.02.2018 21:46

10 Jörg Kruse

Du kannst es dir ja testweise irgendwo auf der Seite ausgeben lassen, dann siehst du, was ankommt:

<?php echo 'Request URI: ' . $_SERVER['REQUEST_URI']; ?>

Aus dem Vergleich mit der Ausgabe auf dem lokalen Server lassen sich ggf. Rückschlüsse ziehen, was schief gelaufen ist.

15.02.2018 21:56