Strato: Geisterhaftes url_rewrite
eddie
- htaccess
- php
0 Rolf B0 TS- apache
- htaccess
- webserver
0 Mitleser 2.00 TS0 Mitleser 2.00 eddie
Hey ihr alle,
ich hab grad einen größeren Umzug zu Strato hinter mir, und natürlich gibt's da null Support. Darum hoffe ich auf einen Geistesblitz bei Euch:
Meine Projekt beinhaltet ein Script ./blog.php. Der Zugriff erfolgt ausschließlich via .htaccess und url_rewrite (bspw. mit dieser neuerdings fehlerhaften Weiterleitung): Sie führt zu blog.php, aber unter kompletter Missachtung der Angaben in der .htacces (s. unten).
Mehr noch: Das Script ./blog.php wird projektweit nicht ein einziges Mal im Code erwähnt. Es erscheint mir also absolut ausgeschlossen, dass es ohne Umweg über die .htaccess aufgerufen wird.
Nun aber 3 Punkte:
Was vergesse ich hier? Wie kommt STRATO dazu, so eine geisterhafte Weiterleitung ohne jede Grundlage am Leben zu erhalten?
Ich glaube nicht, dass der eigentliche Rewrite-Code relevant ist, aber da Ihr sicher danach fragen werdet, hier ist er:
RewriteRule ^blog/blog(?:-p([0-9]+))?\.htm /blog.php?p=$1 [L,NC]
RewriteRule ^blog/(.*).htm$ /blog.php?kennung=$1 [L]
Interessant daran ist höchstens, dass PHP auch den Query-String nicht erhält, $_GET['kennung'] ist also einfach nicht vorhanden.
Hallo eddie,
wenn ich das richtig deute, dann sollte
https://www.umdiewelt.de/blog/wellnessurlaub-in-mayrhofen.htm
umgeschrieben werden auf
https://www.umdiewelt.de/blog.php?kennung=wellnessurlaub-in-mayrhofen
Aber wenn ich das aufrufe, bekomme ich nur die Artikelübersicht. Das ist schonmal sehr schräg.
Außer in der .htaccess deines Projekts können Rewrite Rules auch in einem directory-Abschnitt der Serverkonfiguration stehen. Wenn der Blog ein Standardpaket von Strato ist, dann KÖNNTE es sein, dass eine solche Regel greift.
Wichtig ist meines Wissens auch die Angabe von RewriteEngine On in der .htaccess - hast Du das?
Dann sollte mod_rewrite grundsätzlich funktionieren, sagt Strato.
Um das Problem einzugrenzen, schlage ich diese Versuche vor:
Wenn das klappt, funktioniert die Parameterübergabe und auch die Rewrite-Engine, und Du kollidierst mit irgendwelchen Default-Regeln von Strato.
Sie schreiben zwar, dass Sie deine individuelle Programmierung nicht supporten können. Aber wenn bestimmte Namen nicht funktionieren, dann müssten Sie Dir ja sagen können, ob die reserviert sind oder so.
Du könntest auch schauen, ob es in den Log-Dateien Fehlermeldungen oder andere Hinweise gibt.
Rolf
Hallo Rolf,
danke für Deine Antwort, hat mir schonmal eine ganze Menge neue Ansätze gegeben! Und sorry, dass die Rückmeldung so lange gedauert hat.
Tatsächlich bin ich mir jetzt - mit Deinem Input - absolut sicher, dass Strato auf meinem Server diese Umleitung für /blog/... umsetzt, und zwar bevor meine .htaccess überhaupt greift.
Die ersten Kunden beschweren sich gerade, zu Recht, und ich warte hier, dass bei Strato überhaupt jemand versteht, wo das Problem liegt. GRRR. Aber immerhin nicht mehr im Blindflug. Danke!
Martin
Hello,
Außer in der .htaccess deines Projekts können Rewrite Rules auch in einem directory-Abschnitt der Serverkonfiguration stehen. Wenn der Blog ein Standardpaket von Strato ist, dann KÖNNTE es sein, dass eine solche Regel greift.
Dann könnte es eine .htaccess geben, die direkt zum Blog gehört und dort fehlt dann ein [QSA]
Beispiel: RewriteRule (.*) index.php/$1 [QSA]
Alternativ könnte Eddie auch in der index.php
(o. ä.) des Blogs mal mittels PHP nach $_SERVER['PATHINFO']
Ausschau halten.
Glück Auf
Tom vom Berg
Hello Eddie,
hast Du schon geprüft, ob .htccess
überhaupt eingeschaltet ist?
Guckst Du z. B. hier oder in unserem Wiki. HUCH Wiki ist noch hohl :-(
Wenn man den Link https://willy-tech.de/htaccess-auf-apache-aktivieren/
direkt in die Adressleiste kopiert, funktioniert er auch. Wieso das hier mit der Verlinkung nicht klappt, ist ein anderes Geheimnis :-O
Glück Auf
Tom vom Berg
hast Du schon geprüft, ob
.htccess
überhaupt eingeschaltet ist?
Soweit man des OP Aussagen denn auch liest, augenscheinlich schon:
M.E. kann man bei so seltsamen Rewrites noch zwei Dinge in Betracht ziehen. Zum einen können gerade 301er gerne mal in Caches landen. Weiter kann ja auch in serverseitigen Conf ein Rewrite hinterlegt sein, das ist ja nicht auf die .htaccess beschränkt.
Hello,
hast Du schon geprüft, ob
.htccess
überhaupt eingeschaltet ist?Soweit man des OP Aussagen denn auch liest, augenscheinlich schon:
M.E. kann man bei so seltsamen Rewrites noch zwei Dinge in Betracht ziehen. Zum einen können gerade 301er gerne mal in Caches landen. Weiter kann ja auch in serverseitigen Conf ein Rewrite hinterlegt sein, das ist ja nicht auf die .htaccess beschränkt.
Und mod_rewrite
muss auch vorhanden und eingeschaltet sein.
Siehe Apache-Doku zu mod_rewrite: RewriteEngine On
Das konnte ich jetzt aus Eddies Posting auch nicht erkennen. Er hat nur die Rewrite-Rules gepostet.
Glück Auf
Tom vom Berg
Und
mod_rewrite
muss auch vorhanden und eingeschaltet sein. Siehe Apache-Doku zu mod_rewrite
Das konnte ich jetzt aus Eddies Posting auch nicht erkennen. Er hat nur die Rewrite-Rules gepostet.
Soweit man des OP Aussagen denn auch liest, augenscheinlich schon:
Alles von Euch Geschriebene kann ich bestätigen. Das Thema .htaccess ist mir nicht fremd. Es handelt sich definitiv um dieses Problem hier:
Weiter kann ja auch in serverseitigen Conf ein Rewrite hinterlegt sein, das ist ja nicht auf die .htaccess beschränkt.
Bin jetzt dran, mal sehen, ob ich am anderen Ende jemanden erwische, der das Thema überhaupt versteht... ;-)
https://www.umdiewelt.de/blog/
Hm. Ist Dir bekannt, dass jede Datei „.htaccess“ auf dem Weg zu dem Verzeichnis beachtet wird? Hast Du vielleicht eine herumliegen, von welcher Du denkst, die würde nicht beachtet?
Auch der Browser-Cache kann eine Rolle spielen. Mach (und lasse) die Entwickler-Tools auf und stell den mal ab. Und: „Ach. Das Handbuch zum Apache behauptet, man könne rewrites loggen!“
ich hab grad einen größeren Umzug zu Strato hinter mir,
Wer, BITTE, hat DAS so entschieden?
https://www.umdiewelt.de/blog/
Hm. Ist Dir bekannt, dass jede Datei „.htaccess“ auf dem Weg zu dem Verzeichnis beachtet wird? Hast Du vielleicht eine herumliegen, von welcher Du denkst, die würde nicht beachtet?
https://httpd.apache.org/docs/2.4/howto/htaccess.html#when sagt:
Further note that httpd must look for .htaccess files in all higher-level directories, in order to have a full complement of directives that it must apply. (See section on how directives are applied.) Thus, if a file is requested out of a directory /www/htdocs/example, httpd must look for the following files:
/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess
Beachte also: Es werden sogar Dateien außerhalb (oberhalb) des Document-Root ausgewertet!
Hello,
https://www.umdiewelt.de/blog/
Hm. Ist Dir bekannt, dass jede Datei „.htaccess“ auf dem Weg zu dem Verzeichnis beachtet wird? Hast Du vielleicht eine herumliegen, von welcher Du denkst, die würde nicht beachtet?
https://httpd.apache.org/docs/2.4/howto/htaccess.html#when sagt:
Further note that httpd must look for .htaccess files in all higher-level directories, in order to have a full complement of directives that it must apply. (See section on how directives are applied.) Thus, if a file is requested out of a directory /www/htdocs/example, httpd must look for the following files:
/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess
[...] und soweit ich mich erinnere, kann man in einer unteren (tieferen) Ebene auch die/viele der Direktiven übergeorneter Ebenen wieder aufheben. Und die gelten dann wieder für alle tieferen Verzeichnisebenen bis auf Widerruf.
Glück Auf
Tom vom Berg
[...] und soweit ich mich erinnere, kann man in einer unteren (tieferen) Ebene auch die/viele der Direktiven übergeorneter Ebenen wieder aufheben. Und die gelten dann wieder für alle tieferen Verzeichnisebenen bis auf Widerruf.
RewriteRules werden indes indes nicht überladen. Die werden zu einer Liste gefügt. Dabei ist aber das jeweilige Verzeichnis zu beachten:
https://httpd.apache.org/docs/2.4/howto/htaccess.html#rewrite
Hello,
[...] und soweit ich mich erinnere, kann man in einer unteren (tieferen) Ebene auch die/viele der Direktiven übergeorneter Ebenen wieder aufheben. Und die gelten dann wieder für alle tieferen Verzeichnisebenen bis auf Widerruf.
RewriteRules werden indes indes nicht überladen. Die werden zu einer Liste gefügt. Dabei ist aber das jeweilige Verzeichnis zu beachten:
https://httpd.apache.org/docs/2.4/howto/htaccess.html#rewrite
Jetzt habe ich Dich zuerst nicht verstanden:
Aber Rewrite-Rules werden "addiert", also der Reihe nach von oben nach unten weiter ausgeführt, aber Zugangsregeln werden nicht vererbt, sondern von Ebene zu Ebene neu interpretiert.
Ist das richtig so?
Glück Auf
Tom vom Berg
aber Zugangsregeln werden nicht vererbt, sondern von Ebene zu Ebene neu interpretiert.
Ja. Und zwar etwa so:
Hello,
das ist keinesfalls so.
Das hat man mir hier schon einmal bewiesen.
Bitte sucht erst im Archiv!
aber Zugangsregeln werden nicht vererbt, sondern von Ebene zu Ebene neu interpretiert.
Ja. Und zwar etwa so:
- Du willst ins Gebäude "/". Du braucht den Haustürschlüssel.
- Du willst in die Wohnung /foo. Du braucht den Wohnungsschlüssel. Musst aber vorher ins Gebäude. (Gehe zu 1.)
- Du willst in den Briefkasten /tok. Du brauchst den Briefkastenschlüssel. Musst aber vorher ins Gebäude (Gehe zu 1.).
- Du willst an den Arzeimittelschrank /foo/bar. Du brauchst den Schlüssel für den Arzeimittelschrank. Musst aber erst in Gebäude / und in die Wohnung /foo. (Gehe über 1. und dann 2.)
Glück Auf
Tom vom Berg
Hello,
VORSICHT
das ist keinesfalls so.
Das hat man mir hier schon einmal bewiesen.
Du hast Recht, ich hab das gerade getestet: Das Kind ohne Haustürschlüssel kam in die Wohnung! (Aber Gottlob nicht in den Arzneischrank auch nicht an den Briefkasten). Bemerkenswert: Ins Haus kam das Kind nicht! Man hat also viel „Spaß“ wenn man mit htaccess hierarchische Zugänge konstruieren will:
Wenn eine CSS-Datei, die in Wohnung aufgerufen wird, im Haus liegt, braucht das eine Identifizierung und ohne diese sieht die Wohnung aus wie Kraut und Rüben. Nur Benutzern, die auch ins Haus dürfen erscheint diese aufgeräumt.
Ich hatte:
/haus (Rechte für: Papa, Mama)
/haus/wohnung (Rechte für: Papa, Mama, Kind)
/haus/wohnung/arzneischrank (Rechte für: Mama)
/haus/briefkasten (Rechte für: Papa)
Hello JR,
VORSICHT
das ist keinesfalls so.
Das hat man mir hier schon einmal bewiesen.Du hast Recht, ich hab das gerade getestet: Das Kind ohne Haustürschlüssel kam in die Wohnung! (Aber Gottlob nicht in den Arzneischrank auch nicht an den Briefkasten). Bemerkenswert: Ins Haus kam das Kind nicht! Man hat also viel „Spaß“ wenn man mit htaccess hierarchische Zugänge konstruieren will:
Wenn eine CSS-Datei, die in Wohnung aufgerufen wird, im Haus liegt, braucht das eine Identifizierung und ohne diese sieht die Wohnung aus wie Kraut und Rüben. Nur Benutzern, die auch ins Haus dürfen erscheint diese aufgeräumt.
Ich hatte:
/haus (Rechte für: Papa, Mama) /haus/wohnung (Rechte für: Papa, Mama, Kind) /haus/wohnung/arzneischrank (Rechte für: Mama) /haus/briefkasten (Rechte für: Papa)
Es gelten zunächst die vererbten Rechte von Verzeichnis an Unterverzeichnis. Die werden dann in Unterverzeichnis wieder neu festgelegt, wenn dieses eine eigene .htaccess mit BasicAuth hat.
Die .htaccess-Dateien sollten auch nicht von den Usern des Verzeichnisses bearbeitbar sein, sondern nur von root oder eine(m|r) anderen Priveligierten.
Leg doch nochmal ein Verzeichnis
/haus/wohnung/arzneischrank/frauenpille/
an ohne eigene .htaccess, und schau, ob Mama Zugriff darauf hat. Außer Mama sollte niemand anderes darauf Zugriff haben.
Wenn Du jetzt noch
/haus/wohnung/arzneischrank/männerpille/
anlegst und eine .htaccess für Papa hineinlegst, sollte Papa keinen allgemeinen Zugang zum arzneischrank
haben und auch nicht zu frauenpille
aber auf das Verzeichnis männerpille
.
Mama hingegegen darf nicht in männerpille
hineinschauen.
Darum benötigt man für hierarchische Vererbung immer auch Gruppenrechte zusätzlich zu den Einzelrechten, die in der untergeordneten .htaccess dann wiederholt werden müssen. Sonst wird das Ganze unüberschaubar.
Wenn es so ist, wie ich denke, sollten wir diese Beschreibung ins WIKI aufnehmen <i>.
Darf man denn dort p... und v... schreiben? ;-P
BTW:
die üblichen Kurzbegriffe für p... und v... gingen leider nicht durch den Spamfilter, obwohl ich als angemeldeter User posten wollte. Das ist ein Designfehler!
Glück Auf
Tom vom Berg
Hallo,
die üblichen Kurzbegriffe für p... und v... gingen leider nicht durch den Spamfilter, obwohl ich als angemeldeter User posten wollte. Das ist ein Designfehler!
nein, meines Wissens ist das Absicht. Der Content-Filter soll für alle gelten.
Einen schönen Tag noch
Martin
Hello Martin,
die üblichen Kurzbegriffe für p... und v... gingen leider nicht durch den Spamfilter, obwohl ich als angemeldeter User posten wollte. Das ist ein Designfehler!
nein, meines Wissens ist das Absicht. Der Content-Filter soll für alle gelten.
Ich habe das Erlebnis eben zum ersten Mal gehabt.
Wenn Ihr das so haben wollt :-|
Ich musste erst länger nachdenken, was denn an dem Posting SPAM sein könnte und habe es erst der Diskussion um den KI-Posting-BOT zugerechnet und gedacht, es wäre etwas Neues.
Glück Auf
Tom vom Berg
Hallo,
Der Content-Filter soll für alle gelten.
Ich habe das Erlebnis eben zum ersten Mal gehabt.
Ich musste erst länger nachdenken, was denn an dem Posting SPAM sein könnte
Vielleicht könnte für Angemeldete der Grund detaillierter angezeigt werden?
Gruß
Kalk
Wenn Du jetzt noch
/haus/wohnung/arzneischrank/männerpille/
anlegst und eine .htaccess für Papa hineinlegst, sollte Papa keinen allgemeinen Zugang zum
arzneischrank
haben und auch nicht zufrauenpille
aber auf das Verzeichnismännerpille
.Mama hingegegen darf nicht in
männerpille
hineinschauen.
Diese Sachverhalte sind schon getestet worden (Kind → Haus vers. Wohnung)
Die .htaccess-Dateien sollten auch nicht von den Usern des Verzeichnisses bearbeitbar sein, sondern nur von root oder eine(m|r) anderen Priveligierten.
Hehe. Kömmt mal wieder darauf an. Im Massenhosting (genau dafür wurde .htaccess repektive die Konfiguration per Verzeichnis erfunden) ist es faktisch unumgehbar, dass der Kunde, also Benutzer, also Eigentümer des Verzeichnisses diese Datei bearbeitet. Aus dem Grund läuft da z.B. auch etwas wie suexec (Skripte werden mit Rechten eines konfigurierbaren Benutzers - regelmäßig ist das just der Verzeichniseigentümer - ausgeführt.
Hallo TS,
Aber Rewrite-Rules werden "addiert", also der Reihe nach von oben nach unten weiter ausgeführt,
Ich hab Dich vielleicht nicht verstanden. Aber in der Apache Doku steht:
Directives are applied in the order that they are found. Therefore, a .htaccess file in a particular directory may override directives found in .htaccess files found higher up in the directory tree.
Das verstehe ich so:
Wenn die URL https://www.example.org/blog/sonne-im-harz
lautet, und der Provider das Web unter /www/foo/example abgelegt hat, dann sucht der Apache an diesen Stellen und in dieser Reihenfolge nach .htaccess Dateien:
/www/foo/example/blog/.htaccess
/www/foo/example/.htaccess ←––
/www/foo/.htaccess
/www/.htaccess
/.htaccess
und guckt dann noch in die httpd-Configdatei.
Die Rewriterules von eddie enthalten blog/ als Pfad im Match-String, sie dürften also in der mit dem Pfeil markierten .htaccess Datei. Sie enthalten beide das L Flag, d.h. wenn sie matchen, ist die htaccesserei zu Ende und ein Überschreiben durch weiter oben liegende .htaccess Dateien kann nicht passieren.
Frage @eddie: Gibt's zufällig einen Ordner ./blog in deinem Web, und da steht auch noch eine .htaccess Datei drin? Oh... Äh, also das, was Tom heute morgen 6:06 Uhr schrieb?
Man weiß natürlich auch nicht, ob Strato dem Apache irgendwelche Balancer vorschaltet, die /blog Zugriffe nach Bukarest (in die Wallachei) lenken.
Rolf
Hallo Rolf,
Wenn die URL
https://www.example.org/blog/sonne-im-harz
lautet, und der Provider das Web unter /www/foo/example abgelegt hat, dann sucht der Apache an diesen Stellen und in dieser Reihenfolge nach .htaccess Dateien:/www/foo/example/blog/.htaccess /www/foo/example/.htaccess ←–– /www/foo/.htaccess /www/.htaccess /.htaccess
genau in umgekehrter Reihenfolge: Vom Root aus abwärts in die untergeordneten Verzeichnisse.
und guckt dann noch in die httpd-Configdatei.
Und das zuallererst.
Einen schönen Tag noch
Martin
Wenn die URL
https://www.example.org/blog/sonne-im-harz
lautet, und der Provider das Web unter /www/foo/example abgelegt hat, dann sucht der Apache an diesen Stellen und in dieser Reihenfolge nach .htaccess Dateien:/www/foo/example/blog/.htaccess /www/foo/example/.htaccess ←–– /www/foo/.htaccess /www/.htaccess /.htaccess
Hm. Das erklärt DAS.
genau in umgekehrter Reihenfolge: Vom Root aus abwärts in die untergeordneten Verzeichnisse.
und guckt dann noch in die httpd-Configdatei.
Und das zuallererst.
Jepp! Deswegen heißt die Direktive ja: AllowOverride