Der Martin: Anzeige von URLs mit angehängtem /irgendwas

Beitrag lesen

Hi,

vorab: ich weiß nicht, ob HTTP der richtige Themenbereich ist.

es ist zumindest nicht ganz falsch. Die Frage hätte ebensogut in den Themenbereich SERVER oder sogar PHP gepasst, aber HTTP ist nicht übel.

Wenn ich an die URL einer PHP-Seite einen slash und dann irgendwas anhänge,
Beispiel: http://www.example.com/index.php/irgendwas
dann wird die Seite aufgerufen, aber ohne CSS
Relative Links auf der so aufgerufenen Seite funktionieren nicht mehr.

Richtig, können sie auch nicht. Mache dir klar, was da wirklich passiert.

Mal angenommen, dein Stylesheet liegt in /styles/default.css und wird im Dokument als "styles/default.css" referenziert. Das PHP-Script liegt im Domain Root, also in /index.php und bekommt den zusätzlich übergebenen Rattenschwanz als $_SERVER['PATH_INFO'] geliefert.
Von diesem Mechanismus weiß aber dein Browser nichts. Er sieht nur, dass er eine HTML-Ressource von /index.php/irgendwas abgerufen hat und "glaubt" intern, es handle sich um die Datei "irgendwas" im Verzeichnis "/index.php/". Jetzt soll er von dieser URL ausgehend noch eine weitere relativ adressierte Ressource abrufen, also versucht er aus der Dokument-URL das Basis-Verzeichnis zu isolieren und hängt den Namen der zusätzlichen Ressource an. Er bekommt dann als URL für das Stylesheet "/index.php/styles/default.css", fordert diese Ressource an - und greift ins Leere.

Was kann ich dagegen tun?

Adressiere deine eingebundenen Stylesheets, Bilder, Javascripts u.ä. nicht relativ, sondern absolut. Fordere nicht "styles/default.css" an, sondern stattdessen "/styles/default.css", und alles wird gut. ;-)

Wobei mir nicht klar ist, wer solche URLs aufruft. Sind das eh nur böse Bots?

Nö, auch Webautoren, die benutzerfreundliche URLS ohne '?' und '&' generieren wollen.

Dann bleibt zumindest das Problem, dass solche Aufrufe meine Logs zumüllen.

Ach so, du meinst, *andere* rufen solche URLs bei dir ab? Tja, dagegen kannst du wohl nicht viel machen.

So long,
 Martin

--
Die letzten Worte des stotternden Beifahrers:
Frei... frei... frei... freilich kommt da was!!