Es wird jedenfalls
keine neue Datei erstellt. Die Vorstellung, dass ein URL wie [noparse]http://www.example.org/my/directory/home.html[/noparse] bedeutet, dass irgendwo auf dem Server eine Datei „home.html“ in einem Unterverzeichnis „my/directory“ existiert, ist
grundsätzlich unzutreffend.
Ihr müsst euch das ungefähr so vorstellen:
Ihr habt eine Serversoftware wie Apache. Bei der kommen die eingehenden Requests vom Nutzer an: „Hallo Server auf [noparse]http://www.example.org/[/noparse], ich hätte gerne die Daten hinter dem Pfad [noparse]/my/directory/home.html[/noparse].“
Jetzt kann sich die Serversoftware vollkommen frei überlegen, was sie zur Nachfrage von [noparse]/my/directory/home.html[/noparse] an Daten ausliefert.
Dass sie dazu nun tatsächlich erst mal nach einer Datei in $DOCROOT[noparse]/my/directory/home.html[/noparse] sucht und diese – falls vorhanden – ausliefert, ist lediglich die Standardeinstellung. Das lässt sich zum Beispiel per .htaccess-Datei ganz einfach umkonfigurieren, sodass die Serversoftware etwa zu [noparse]/my/directory/home.html[/noparse] die Datei $DOCROOT[noparse]/hallo.txt[/noparse] ausgibt.
Bei vielen Webseiten ist es so, dass der Großteil der Requests an eine zentrale Indexseite umgeleitet wird, die dann entsprechend des Pfads eine Ausgabe erzeugt. Wenn ihr beispielweise URLs habt wie [noparse]http://www.example.org/users/calm[/noparse] oder [noparse]http://www.example.org/users/threadi[/noparse], dann ist davon auszugehen, dass auf dem Webserver keine Verzeichnisse/Dateien „users“ oder „calm“ oder „threadi“ existieren, sondern dass dort ein zentrales Skript läuft, das grob das hier tut:
PHP:
if ($requestUri === '/users/threadi') { echo 'Nutzerseite von threadi'; }
elseif ($requestUri === '/users/calm') { echo 'Nutzerseite von Calm'; }
In Wahrheit würde das Skript natürlich eher so funktionieren (Pseudocode):
Code:
if (requestUri == "/users/<username>") then
hole Daten von <username> aus Datenbank;
füge Daten in HTML-Vorlage ein;
schicke fertige HTML-Seite zurück an Browser;
endif
Ein Beispiel, das ungefähr so funktioniert, habe ich neulich mal hier gepostet:
PHP Forum: phpforum.de - Einzelnen Beitrag anzeigen - Textinhalt mit Variablen 1:1 in Datei speichern/erzeugen
Dass das Forum hier mit der gerade beschriebenen Technik so tut, als sei jeder Thread eine eigene HTML-Seite, hat vor allem mit Suchmaschinenoptimierung zu tun. Es gibt/gab das Gerücht, dass Suchmaschinen Seiten mit .html-Endung „bevorzugen“, weil sie sie für statische Inhalte halten. Zudem mögen es Suchmaschinen, wenn der Suchbegriff im URL auftaucht. (Und für Menschen ist es so natürlich auch lesbarer, das sollte man nicht vergessen.)
Außer der ID (47796), die die Software benötigt, um einen Thread eindeutig zu identifizieren, sind die restlichen URL-Bestandteile technisch gesehen unnötig. Das könnt ihr sogar ausprobieren, indem ihr [noparse]http://www.html.de/php/47796-test-huhu-das-hier-ist-ausgedacht.html[/noparse] aufruft. Die Software schnappt sich dann die Thread-ID, stellt fest, dass der URL eigentlich anders aussehen sollte und leitet auch dann zum korrekten URL um. Daran sieht man, dass die Software wenig mehr als die ID benötigt.