Dateinamen in URL fehlt. Wozu und wie?
Linda
- php
Hallo Forumer,
ich habe eine theoretische Frage, konnte in Google nichts dazu finden, das mir passende Suchbegriffe fehlen :).
Wenn ich mit Klick auf einen Link eine neue Datei aufmache, dann steht bei mir der Dateiname in URL: http://mydomain.com/new_user.php
Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user
Ich kann mir nicht vorstellen, dass es da für jede Datei ein Verzeichnis erstellt worden ist. Also wird da eher irgendein Skript sitzen, dass den Pfad entgegennimmt, diesen Untersucht, und dann den passenden Skript aufruft und $_POST Array an diesen übergibt. Richtig?
Die zweite Frage: hat es etwas mit Sicherheit der Seite zu tun? Sollte man so etwas machen, oder ist es eine Geschmackssache?
Gruß, Linda
Hallo Linda!
ich habe eine theoretische Frage, konnte in Google nichts dazu
finden, das mir passende Suchbegriffe fehlen :).
So theoretisch ist deine Frage nicht. Dir fällt wirklich nur das
richtige Stichwort.
Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht
auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen.
In meinem Beispiel wäre dies: http://mydomain.com/new_user
Ich kann mir nicht vorstellen, dass es da für jede Datei ein
Verzeichnis erstellt worden ist. Also wird da eher irgendein Skript
sitzen, dass den Pfad entgegennimmt, diesen Untersucht, und dann
den passenden Skript aufruft und $_POST Array an diesen übergibt.
Richtig?
Nein, in den meisten Fällen wird das über das Apache-Module mod_rewrite
gelöst.
Die zweite Frage: hat es etwas mit Sicherheit der Seite zu tun?
Sollte man so etwas machen, oder ist es eine Geschmackssache?
Du kannst damit natürlich den wirklichen Ort der Datei verstecken
und dich ggf. besser gegen Injections schützen. Meistens wird das
aber tatsächlich nur aus "Kosmetik"-gründen verwendet.
℆, ℒacℎgas
Hallo Lachgas,
Nein, in den meisten Fällen wird das über das Apache-Module mod_rewrite
gelöst.
Da ich keinen Zugriff auf Apache httpd.conf bei meinem Provider habe, gehe ich davon aus, dass diese Lösung mir nicht zur Verfügung steht.
Meistens wird das aber tatsächlich nur aus "Kosmetik"-gründen verwendet.
Sieht wirklich irgendwie besser aus :) Werde im Hinterkopf behalten, wenn es sich mal lohnen wird einen dedizierten Server beim Provider zu mieten.
Danke und Gruß, Linda
Hallo Linda,
Da ich keinen Zugriff auf Apache httpd.conf bei meinem Provider habe, gehe ich davon aus, dass diese Lösung mir nicht zur Verfügung steht.
Darfst du .htaccess-Dateien verwenden? Dann geht es vielleicht doch.
Dazu darf AllowOverride allerdings nicht auf none stehen.
Gruß
Alexander Brock
Hallo Alexander,
Darfst du .htaccess-Dateien verwenden? Dann geht es vielleicht doch. Dazu darf AllowOverride allerdings nicht auf none stehen.
Ja, die .htaccess-Dateien darf ich verwenden. Bis jetzt habe ich nur passwortgeschützte Bereiche damit erstellt bzw. eine Weiterleitung für 404, 401 etc. Fehler. Habe jetzt gerade in phpinfo() nachgeschaut, ob AllowOverride eingeschaltet ist. Nicht gefunden, aber ich gehe davon aus, wenn .htaccess bereits funktioniert, dass ich es darf :)
Soll ich in .htaccess die Apache-Anweisungen wie in httpd.conf runterschreiben? Sicherlich nicht. Werde mich mal in Google umsehen. Danke für den Hinweis!
Gruß, Linda
hi,
Habe jetzt gerade in phpinfo() nachgeschaut, ob AllowOverride eingeschaltet ist. Nicht gefunden,
kannst du da auch nicht, da das eine konfigurationsanweisung des apachen ist, die für PHP weitgehend uninteressant ist.
aber ich gehe davon aus, wenn .htaccess bereits funktioniert, dass ich es darf :)
nein, so pauschal kann man das nicht sehen.
AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.
Soll ich in .htaccess die Apache-Anweisungen wie in httpd.conf runterschreiben? Sicherlich nicht.
doch, was mod_rewrite angeht, sind die anweisungen die gleichen.
Werde mich mal in Google umsehen. Danke für den Hinweis!
eine gute anlaufstelle ist der URL Rewriting Guide - allerdings in englisch.
wenn ich mich recht erinnere, gibt es aber auch irgendwo eine deutsche version davon; oder zumindest gleichwertige seiten.
gruß,
wahsaga
Hallo wahsaga,
kannst du da auch nicht, da das eine konfigurationsanweisung des apachen ist, die für PHP weitgehend uninteressant ist.
ich hatte schon Mal hier gefragt, wie ich an zumindest informativ an die Einstellungen des Apache bei meinem Provider dran komme. Sowas ähnliches wie phpinfo() oder auf der Kommando-Zeile oder... egal wie :) Leider keine Antwort gefunden.
AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.
Das kann ich nur durch try-and-error rausfinden. Was ich im Moment auch mache :)
doch, was mod_rewrite angeht, sind die anweisungen die gleichen.
eine gute anlaufstelle ist der URL Rewriting Guide - allerdings in englisch.
jau, ich hatte schon paar Beispiele gefunden. Aber Guide ist natürlich die Sahne. Englisch stört nicht. Bis jetzt resultieren alle meine Versuche auf dem lokalen Server in 500 Fehler :) Ich hatte da AllowOverride auf All gestellt und teste die Rewrite Direktiven aus.
Gruß, Linda
Hallo wahsaga,
auf dem lokalen Server funktioniert das hier einwandfrei:
RewriteEngine On
RewriteRule ^main/(.*) http://mydomain.com/$1.php
nein, so pauschal kann man das nicht sehen.
AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.
Allerdings auf dem Server des Providers darf ich .htaccess nicht verändern. Keine Rechte. Die .htacces wird durch Confixx auf dem Server erstellt, wenn ich passwortgeschützte Bereiche anlege, bzw. Fehler-Hanlding hinzufüge, aber eine fertige .httaccess auf den Server laden - no way!
Es sieht aber soooo schön aus lokal. Vor allem, man sieht gar nicht welche Sprache ich für die Seiten verwende, da dieses verräterische ".php" wegfällt.
Mda... Muss ich wohl den eigenen Provider hacken, um einen für mich harmlosen htaccess-Zusatz auf den Server zu schleudern. ;)
Gruß, Linda
hi,
Allerdings auf dem Server des Providers darf ich .htaccess nicht verändern. Keine Rechte. Die .htacces wird durch Confixx auf dem Server erstellt, wenn ich passwortgeschützte Bereiche anlege, bzw. Fehler-Hanlding hinzufüge, aber eine fertige .httaccess auf den Server laden - no way!
connfixx und .htaccess ist ein thema, welches ich auch "mag".
es sollte aber eigentlich ausreichen, mit dem FTP-programm die rechte einer ggf. vorhandenen .htaccess-datei so zu ändern, dass auch dein FTP-user sie beschreiben/löschen darf, damit du eine "eigene" hochladen kannst. (wenn schon eine existiert und einträge enthält, empfiehlt es sich natürlich eher, diese einträge zu behalten und zu ergänzen, bevor nachher irgendetwas anderes nicht mehr wie gewünscht funktioniert.)
um .htaccess-datei überhaupt "sehen" zu können per FTP, muss man idR. erst mal das "list all"-kommande an den FTP-server absetzen.
in vielen FTP-programmen gibt es dazu eine kleine eingabebox, in die man dann sowas wie -la eintragen und abschicken muss.
gruß,
wahsaga
Hallo wahsaga,
connfixx und .htaccess ist ein thema, welches ich auch "mag".
Dann wird Dich sicherlich meine letzte Erkenntnis interessieren. Vorschnelle Urteile sind meine Stärke - stimmen aber nicht immer.
Was ich rausgefunden habe:
1. Man darf die .htaccess auf dem Server _nicht_ überschreiben.
2. Man darf diese aber umbenennen und eine neue hochladen.
3. In Zusammenhang mit Confixx existiert aber noch ein Problem hier beschrieben
Ich habe den Provider angeschrieben und bin hoffentlich morgen glücklich :)
Gruß, Linda
Man kann einen Server so konfigurieren, dass er automatisch eine index.html/index.htm/index.pl/index.php bzw default.html/default.html... aufruft, wenn ein Verzeichnis aufgerufen wurde. D.h. du landest auf der index.html wenn du ein Verzeichnis aufrufst.
Schau einmal in die Adressleiste deines Browsers, wenn du dich auf der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?
Hallo dad!
Man kann einen Server so konfigurieren, dass er automatisch eine
index.html/index.htm/index.pl/index.php bzw
default.html/default.html... aufruft, wenn ein Verzeichnis aufgerufen
wurde. D.h. du landest auf der index.html wenn du ein Verzeichnis
aufrufst.
Genau das kannte sie ja bereits.
Schau einmal in die Adressleiste deines Browsers, wenn du dich auf
der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?
Es gibt sicherlich keine index.html.
℆, ℒacℎgas
Schau einmal in die Adressleiste deines Browsers, wenn du dich auf
der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?Es gibt sicherlich keine index.html.
Behaupte ich ja auch gar nicht.
Hi,
Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user
Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
Die ursprüngliche Methode ein paar Buchstaben mittels '.' hinten anzuhängen war zu Einführungszeiten rein informell und ist es bis auf die Betriebssysteme der Firma Microsoft auch heute noch. "new_user" ist hier ein völlig korrekter Dateiname.
Der Nachteil solcher Namensgebung ist beim Apachen und einigen anderen Webservern der, das diese Programme die Behandlung einer Datei vom Dateinamen abhängig machen. Somit müßte für jede Datei einzeln in der Konfiguration bestimmt werden, wie der Apache damit umzugehen hat. Da diese Konfiguration aber auch die Nutzung regulärer Ausdrücke erlaubt wird die Methode die Klassifizierung der Dateien durch eine Endung vorzunehmen geradezu aufgedrängt. Das es durch eine Endung geschieht und keine andere Stelle im Dateinamen genommen wird (der Anfang böte sich ja ebenfalls an) ist fast rein traditionell, die technischen Gründe sind dabei nur marginal.
Der Vorteil von individuellen Dateinamen wäre es, das wirklich und ausschließlich nur diese Dateien vom Apachen behandelt werden. (es wäre noch die eine oder andere Änderung in der Konfiguration des Apachen zusätzlich notwendig, aber ich werde mein Beckmesser für heute mal wieder einstecken ;-)
so short
Christoph Zurnieden
[1] Es muß noch nicht einmal eine Datei sein. Dein Posting hier "http://forum.de.selfhtml.org/?t=106780&m=662288" ist z.B. keine Datei sondern Eingabe für ein Programm, das als Ausgabe einen Stream an den Client sendet. Ohne das irgendwo eine Datei ensteht. Das Posting wird aus einer DB (eine XML-Datei) ausgelesen, zu HTML aufbereitet und versandt.
Hallo Christoph,
Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
Nö, muss es nicht :) Habe selbst auf meinem Server mehrere Unterverzeichnisse mit vers. Projekten und rufe diese immer mit http://mydomain.com/projektordner (ohne Slash) auf.
(es wäre noch die eine oder andere Änderung in der Konfiguration des Apachen zusätzlich notwendig, aber ich werde mein Beckmesser für heute mal wieder einstecken ;-)
genau da hört es auf. Ich habe keinen Zugriff auf httpd.conf und wie ich kürzlich festgestellt habe, kann ich den Inhalt einer .htaccess nur über Confixx verändern. Ich fühle mich traurig und in meinen Rechten verletzt.
Gruß, Linda
echo $begrüßung;
Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
Nö, muss es nicht :)
Natürlich muss er das. Wenn du den abschließenden / beim Anfordern eines Verzeichnisses nicht mit eingibst, senden die meisten Server einen Location-Header indem der / enthalten ist. Der Browser fordert dann noch einmal korrekt das Verzeichnis mit abschließendem / an.
Was würde passieren, wenn dem nicht so wäre?
Mal angenommen, unter http://example.org/dir wird eine HTML-Ressource ausgeliefert, die einen Verweis auf image.png enthält. Der Browser würde "dir" weglassen und http://example.org/image.png anfordern und nicht http://example.org/dir/image.png.
echo "$verabschiedung $name";
Hallo dedlfix,
Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
Nö, muss es nicht :)
Natürlich muss er das. Wenn du den abschließenden / beim Anfordern eines Verzeichnisses nicht mit eingibst, senden die meisten Server einen Location-Header indem der / enthalten ist. Der Browser fordert dann noch einmal korrekt das Verzeichnis mit abschließendem / an.
OK. Mit den HTTP-Header kenne ich mich nicht aus. Daher für einen unerfahrenen User (me :)) sieht die URL-Angabe http://mydomain.com/ordner aus, wie Unterverzeichnis. Weil da ja auch ein Unterverzeichnis existiert und die Inhalte dementsprechend geladen werden. Was der Browser und Server unter einander ausmachen und wer wem was sendet, sehe ich ja nicht. Jetzt weiß ich es auch :) Danke.
Gruß, Linda
echo $begrüßung;
Daher für einen unerfahrenen User (me :)) sieht die URL-Angabe http://mydomain.com/ordner aus, wie Unterverzeichnis.
Ich als mittlerweile erfahrener User, kann das nicht (mehr). :-)
Weil da ja auch ein Unterverzeichnis existiert und die Inhalte dementsprechend geladen werden.
Da scheinst du unzulässigerweise von _einer_ dir bekannten Situation auf alle zu schließen.
Es gibt da im Apachen zwei Handler, die auf die Namen server-status und server-info hören. Diese werden beispielsweise mittels
<Location /server-info>
SetHandler server-info
</Location>
konfiguriert und dann so aufgerufen: http://example.org/server-info, ohne dass es irgendwo ein Verzeichnis namens server-info gibt.
Noch ein Beispiel ist die PathInfo: http://example.org/foo/bar/script.php/pathinfo1/pathinfo2
Hier ruft der Apache das Script document_root/foo/bar/script.php auf. /pathinfo1/pathinfo2 kann man dann in $_SERVER["PATH_INFO"] finden. Alles hinter bar sind keine Verzeichnisse, obwohl die "so aussehen".
Ganz zu schweigen von den "Schweinereien", die man mit mod_rewrite anstellen kann...
Was der Browser und Server unter einander ausmachen und wer wem was sendet, sehe ich ja nicht.
Doch doch, du musst nur mal aufmerksam das Adressen-Eingabefeld deines Browsers betrachten.
echo "$verabschiedung $name";
Hallo dedlfix,
Da scheinst du unzulässigerweise von _einer_ dir bekannten Situation auf alle zu schließen.
Es kam schon paar Mal vor. Wie ich in diesem Posting gelernt habe, ist es häufig mod_rewrite. Und ich dachte es wären Verzeichnisse, ehrlich :)
Doch doch, du musst nur mal aufmerksam das Adressen-Eingabefeld deines Browsers betrachten.
Wunder!! Ich habe es gesehen :) Tatsache. Der Slash kommt von alleine nach Absenden der URL. Bei meinem mod_rewrite dagegen bleibt die URL ohne Slash am Ende. Jetz bin auch ganz schlau :)
Gruß, Linda
Hello,
Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user
Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
Da erinnere ich an meinen Hiweis der letzten Tage auf dirname()
http://de.php.net/manual/de/function.dirname.php
Die Aufweichung der über 30 Jahre gewachsenen und ausgearbeiteten Konventionen zum allgeinen Verständnis wird seit mindestens 12 Jahren intensiv von einer Firma betrieben, die Out-of-th-Box-Betriebssysteme vertreibt und damit sogar den höchsten Verbreitungsgrad erreicht hat. Die Bequemlichkeit des Menschen ist eben immer noch das beste Verkaufsförderungsinstrument.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Linda,
Hinter einem URI wie http://example.net/foo muss nicht ein Verzeichnis foo oder eine Datei foo stecken. Es kann auch was anderes dahinter stecken: content negotiation.
Seien http://example.net/foo.html ein HTML-Dokument und http://example.net/foo.pdf ein PDF-Dokument. Auf Anforderung von http://example.net/foo sendet der (entsprechend konfigurierte) Server eins von beidem, je nachdem, ob der Client lieber text/html oder application/pdf hätte.
Genauso ließen sich auch Grafiken als PNG, GIF, JPEG und SVG nebeneinander anbieten. Wenn der Client mit SVG nichts anfangen kann, hat er es eben nicht in seiner Liste der akzepierten MIME-Typen und bekommt vom Server die Grafik in einem anderen Format, das er darstellen kann.
Bei einer Website, die ich betreue, verwende ich nur noch ausschließlich URIs ohne Dateiendung. Warum soll sich der Nutzer wundern, warum es http://example.net/foo.shtml und nicht http://example.net/foo.html heißt? Und vielleicht reicht SSI eines Tages für eine Seite nicht mehr aus und sie wäre dann http://example.net/foo.php, aber immer noch unter dem alten URI http://example.net/foo erreichbar. Cool links don’t change.
Gunnar