montez
Goto Top

Aufruf eines "Pfades" unterhalb einer PHP-Datei

Moin moin,

ich hoffe Ihr könnt mir bei folgender Problemstellung helfen:

Folgende Konstellation:

Mein Testsystem ist derzeit ein Windows 7 mit XAMPP in Version 3.2.2 . Allerdings verhält sich der Apache unter Linux genau so.

Documentroot ist "C:/xampp/htdocs". Hier gibt es jetzt ein Verzeichnis "Projekt1" und dort liegt liegt eine Datei "index.php".

Rufe ich die URL "127.0.0.1/Projekt1" oder auch "127.0.0.1/Projekt1/index.php" auf erhalte ich die erwartete Seite.

Wenn ich jetzt aber "127.0.0.1/Projekt1/index.php/irgendwas" aufrufe, erhalte ich den Inhalt der index.php aber ohne jegliches CSS.

Wieso liefert er mir hier nicht einen 404?
Wie behandelt der Apache diese URL? Hat hier jemand eine verständliche Erklärung zur funktionsweise?


Gruß in die Runde!

Content-Key: 296972

Url: https://administrator.de/contentid/296972

Printed on: May 8, 2024 at 02:05 o'clock

Member: StefanKittel
Solution StefanKittel Feb 22, 2016, updated at Feb 23, 2016 at 08:34:08 (UTC)
Goto Top
Hallo,

ich kann das so bestätigen.
Scheinbar interpretiert der apache hier den parameter als "ausführen in". Damit findet er alle Dateien mit relativen Pfad nicht mehr.

Stefan
Member: eisbein
Solution eisbein Feb 22, 2016, updated at Feb 23, 2016 at 08:34:10 (UTC)
Goto Top
Hallo!

Das lässt sich unterbinden, wenn man die Base-Url im Head richtig anwendet face-wink

Beispiel: base-Elemente in HTML
<head>
  <base href="http://wiki.selfhtml.org">  
</head>

Beispiel: base-Elemente in xHTML
<head>
  <base href="http://wiki.selfhtml.org" />  
</head>


Die Interpretation liegt hier nicht beim Apache, sondern beim Browser. Mit der Base-Url hat der Browser immer einen Anhaltspunkt für seine relativen Links.

Gruß
Eisbein
Member: montez
montez Feb 23, 2016 at 08:34:01 (UTC)
Goto Top
Hallo,

kurzes Feedback hierzu. Wenn ich die Angabe im Head meiner Datei mache findet der Browser die CSS-Datei tatsächlich wieder und stylt die Seite entsprechende richtig. Der Hinweis war gut, Problem gelöst - Danke!

Die Frage wieso der Apache die index.php ausliefert obwohl ein "/" doch eigentlich in ein tieferes Verzeichnis wechseln lässt, stellt sich mir trotzdem.
Da es ein Verzeichnis unterhalb von index.php ja aber nicht gibt, weil dies ja bereits eine Datei ist würde ich einen Fehler vermuten.
Falls jemand dazu eine Erklärung weiß?!

Gruß

Zitat von @eisbein:

Hallo!

Das lässt sich unterbinden, wenn man die Base-Url im Head richtig anwendet face-wink

Beispiel: base-Elemente in HTML
> <head>
>   <base href="http://wiki.selfhtml.org">  
> </head>
> 

Beispiel: base-Elemente in xHTML
> <head>
>   <base href="http://wiki.selfhtml.org" ></base>  
> </head>
> 

Die Interpretation liegt hier nicht beim Apache, sondern beim Browser. Mit der Base-Url hat der Browser immer einen Anhaltspunkt für seine relativen Links.

Gruß
Eisbein
Member: eisbein
eisbein Feb 23, 2016 at 11:38:57 (UTC)
Goto Top
Mahlzeit!

Was mir noch einfällt ist mod_rewrite.

Bei "127.0.0.1/Projekt1/index.php/irgendwas", wird "irgenwas" als Ordner angesehen, da keine Datei-Endung vorhanden ist.

Mit der RewriteEngine des Apache-Webservers ist es möglich die angeforderte URL anhand von Regeln "umzuschreiben". Basierend auf einem Parser für Reguläre Ausdrücke kann die angeforderte URL manipuliert werden.
Kann sein, dass für diesen Fall eine Standard-Regel existiert.

Gruß
Eisbein