.htaccess, Verzeichnisse, URLs und Antwort-Header, Suchmaschinen
Patrick
- programmiertechnik
Hallöchen allerseits,
nachdem ich mich seit Jahren mit den Themen oben befasse und heute nun schon wieder 5h ohne wirklcihes Ergebnis recherchiert, belästige ich euch nun damit und hoffe, auf Tipps oder gar Antworten.
Grund-Thematik
"Missbrauch" / Verkürzung von URLs zur Abfrage von Variablen per php.
http://www.beispieldomain.de/thema/unterthema
bisher liefen die meisten meiner Seiten über
http://www.beispieldomain.de/index/thema/unterthema
und sollen nun auf oben genanntes umgestellt werden.
weitere Infos
Es funktioniert soweit alles, beide Varianten, bis auf Problemen mit dem Antwort-Header, welcher 404 ist, jedoch über die .htaccess ErrorDokument auf die index.php umgeleitet wird. Da z.B. im Kontaktformular die POST-Daten aufgrund des Headers verloren gehen, funktioniert zwar die Seitenanzeige, aber manches andere eben nicht.
Nun meine erste Frage hierzu:
Im Browser macht es für den Nutzer direkt erstmal keinen Unterschied. Wirkt sich die 404-Header-Antwort z.B. auf Screenreader, Suchmaschinen aus oder ignorieren solche Programme / Bots diese Antwort-Information, wenn Inhalt folgt?
Frage 2:
Habe ich eine Möglichkeit über die .htaccess die Header-Antwort auf 200 zu setzen? Wenn ja wie, da alle Infos, die ich zu solchen und ähnlichen Dingen gefunden habe, alle mit Fehler 500 geendet sind.
Für mich persönlich unschöne Lösung:
wenn ich im Web-Verzeichnis z.B. eine kontakt.php anlege, bekomme ich den Header 200. Inhalt:
<?php
require("index.php");
?>
Hier müsste ich für jede einzelne Seite, die normal eigentlich in einem Unterordner liegt, eine Extra-Datei im Hauptverzeichnis anlegen oder aber den Aufbau der Dateien komplett ändern...
Für Ideen, Hinweise, gedankliche Fehler oder gar Lösungen bin ich extrem dankbar...
Gruß Patrick
Moin Moin!
"Missbrauch" / Verkürzung von URLs zur Abfrage von Variablen per php.
http://www.beispieldomain.de/thema/unterthemabisher liefen die meisten meiner Seiten über
http://www.beispieldomain.de/index/thema/unterthema
und sollen nun auf oben genanntes umgestellt werden.
W3C: "Cool URLs don't change."
weitere Infos
Es funktioniert soweit alles, beide Varianten, bis auf Problemen mit dem Antwort-Header, welcher 404 ist,
Benutze mod_rewrite.
Im Browser macht es für den Nutzer direkt erstmal keinen Unterschied. Wirkt sich die 404-Header-Antwort z.B. auf Screenreader, Suchmaschinen aus oder ignorieren solche Programme / Bots diese Antwort-Information, wenn Inhalt folgt?
404 Not Found, oder auf deutsch: "Weitergehen, hier gibt's nichts zu sehen!" Warum soll sich eine Suchmaschine die Mühe machen, diese Inhalte weiter zu beackern?
Frage 2:
Habe ich eine Möglichkeit über die .htaccess die Header-Antwort auf 200 zu setzen? Wenn ja wie, da alle Infos, die ich zu solchen und ähnlichen Dingen gefunden habe, alle mit Fehler 500 geendet sind.
Benutze mod_rewrite.
Alexander
Hallo Alexander,
danke für deine Antwort... Ich habe mir mod_rewrite mal ein wenig angeschaut und stelle dabei fest (wie der Funktionsname ja aussagt), dass ich damit ja die URL ändere / umschreibe. Die URL und deren Verarbeitung funktioniert aber auch wunderbar und wird gar nicht erst umgeschrieben, sondern wird nur serverseitig als Info verarbeitet.
Insofern möchte ich (ausnahmsweise) nicht an der Ursache arbeiten, sondern mehr am Resultat. Und da ist auch gar nicht die Frage, ob ich den Browser quasi was unterjubeln muss / will, sondern nur, ob ich mir gewisse Arbeit des Strukturumbaus ersparen kann, indem ich per .htaccess bestimmen kann, dass egal, auf welches vermeintliche Verzeichnis er zugreifen will, sich immer an die /index.php hält und dabei auch den Status 200 beibehält.
Vielleicht ist das verständlicher formuliert...
Danke und Gruß
Patrick
Hi,
... dass egal, auf welches vermeintliche Verzeichnis er zugreifen will, sich immer an die /index.php hält und dabei auch den Status 200 beibehält.
Vielleicht ist das verständlicher formuliert...
ich weiss nicht ob dir das weiterhilft, ich nutze für sowas das prinzip der eigenen Fehlerseiten. Aber ich habe mir nie die Mühe gemacht den Header zu prüfen ob dann ein 404 auftaucht, weil die Weiterleitung funktioniert und in den Suchmaschinen wird auch gefunden.
Mario
Hallo Mario,
danke, aber das ist genau das was aktuell läuft... die Fehlerseite ist quasi die index wieder und somit läuft die Seite rein grundtechnisch... aber der Header bleibt trotzdem die 404
Moin Moin!
danke, aber das ist genau das was aktuell läuft... die Fehlerseite ist quasi die index wieder und somit läuft die Seite rein grundtechnisch... aber der Header bleibt trotzdem die 404
Kunststück. Beschäftige Dich mit mod_rewrite. Das ist u.a. auf der Webseite des Apache-Projekts ausführlich dokumentiert.
Die gängige Vorgehensweise dürfte sein, zunächst ALLE URLs so umzuschreiben, dass intern (nicht extern) die URL als /index.php?irgendwas=<ORIGINALURL> behandelt wird. Das erledigt die RewriteRule-Direktive.
Das würde perfekt funktionieren, gäbe es nichts weiter als Resourcen, die die /index.php ausliefern soll. Die /index.php darf dann natürlich auch keine Seiten ausliefern, die direkt die /index.php adressieren (z.B. um JS oder CSS durch PHP zu quälen), denn auch die würden umgeschrieben werden zu /index.php?irgendwas=/index.php?blablabla.
Außerdem ist es in 99,9% aller Fälle wesentlich effizienter (=schneller), unveränderliche Inhalte wie JS, CSS, Bilder, Filme direkt vom Webserver auszuliefern, ohne dass PHP seine schmutzigen Finger im Spiel hat.
Also muß die Umschreiberegel so begrenzt werden, dass sie DANN UND NUR DANN greift, wenn der Webserver für eine angeforderte Resource KEINE Datei findet. Das erledigt die RewriteCondition-Direktive, insbesondere der "-f"-Test.
Alexander
Hi,
.....ohne dass PHP seine schmutzigen Finger im Spiel hat.
Na na, woher dieser Hass? Ohne PHP, wäre das Web heute nicht wie es ist. Was heute PHP macht, war vorher nur durch CGI im Normalfall und später das MS eigene ASP. Aber ohne PHP hätte ich mich nie dazu durchgerungen komplexere Sachen als statische Seiten zu versuchen, denn CGI erschien mir zu umständlich(ist auch heute noch so). Und "schmutzigen Finger" finde ich eine Beleidigung den unzähligen freiwilligen Helfern in Sachen PHP gegenüber, die diesen Erfolg erst möglich gemacht.
Ich bin dankbar, das es PHP gibt!
Mario
hi,
Für Ideen, Hinweise, gedankliche Fehler oder gar Lösungen bin ich extrem dankbar...
Ich habe es bei mir so gelöst:
.htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [NC,QSA]
Damit werden alle URIs auf „/index.php“ umgeleitet, sprich auf „/“, mit PHP lese ich dann alles nach dem ersten „/“ in der URI aus und zeige die entsprechenden Inhalte.
Wenn es Inhalte zur aufgerufenen Seite gibt, dann
[link:http://de.php.net/header@title=header]("HTTP/1.1 200 ok");
ansonsten
header("HTTP/1.1 404 not found");
mit entsprechender Fehlermeldung an den User.
Wobei die Inhalte alle aus einer MySQL-Datenbank kommen.
So sieht es aus.
mfg