.htaccess Hilfe für html Endung

Hallo!

Ich arbeite gerade an meiner ersten Homepage ohne Baukasten und stehe vor einem Problem.
Die Endungen der Seiten lauten .html.
Genau das möchte ich vermeiden. Jetzt habe ich folgendes schon gefunden:

[HTML]# RewriteEnginge anschalten
RewriteEngine on

nächste RewriteRule gilt nur, wenn die Datei nicht existiert

RewriteCond %{REQUEST_FILENAME} !-f

nächste RewriteRule gilt nur, wenn es auch kein Ordner ist

RewriteCond %{REQUEST_FILENAME} !-d

nächste RewriteRule gilt nur, wenn die Anfrage nicht auf .html endet.

[NC] → Groß-Kleinschreibung egal.

RewriteCond %{REQUEST_URI} !.html$ [NC]

Hänge .html an den Dateinamen an.

[L] → Führe keine eventuell folgenden RewriteRules aus

RewriteRule ^(.*)$ $1.html [L][/HTML]

Dadurch ich mich ja überhaupt nicht auskenne, wie die Datei funktioniert und wo ich sie einfügen muss bitte ich um Hilfe.
Bei: Request_Filname muss ich was hinschreiben? Den Ordner in dem die .htaccess Datei geladen wird?
Und bei REQUEST URI was kommt da hinein?
Vielen Dank schon mal für eure Geduld.

Hallo,

das ist eine .htaccess, die ladest in den Ordner wo deine html dateien drin sind und das wars.
In dieser Datei brauchst nichts ändern.
Wenn dann xyz.de/test aufrufst wird xyz.de/test.html angezeigt.

Cheffchen

Hallo Cheffchen!
Danke für deine Antwort.
Ich möchte es aber genau umgekehrt. Jetzt zeigt es mir : xyz.de/test.html an und ich möchte es ohne .html am Ende.

Testarossa

genau das passiert doch.
Ruf die Seite mal normal auf www.xxxxx/yyy.html die seite wird angezeigt
jetzt löscht das .html und die Seite wird immer noch angezeigt.

oder ist die htaccess überhaupt richtig eingebunden?
Test, ersetzt deine mal mit der

RewriteEngine On RewriteRule ^ http://www.google.de [R,L]
wenn jetzt irgend was aufrufst musst immer auf google landen, also nach test gleich wieder löäschen :O).

Cheffchen

Es funktioniert!
Vielen vielen Dank!

Ich muss mich nochmal kurz melden bitte.
Gerade merke ich, dass wenn man die Seite mit " / " am Schluss aufruft, man nicht auf die Seite kommt.
Ohne " / " am Schluss gehts auf die Seite.
Wo muss ich das bitte noch im Code einfügen?
Danke

Ich muss das nochmals genauer erklären:
Meine Domain erscheint nun auch, wenn ich das html weglasse. Das Funktioniert schon mal perfekt.
Jetzt aber ist mir aufgefallen, dass meine Unterseite in Google auf Platz 1 ist, allerdings wird diese mit einem „/“ am Ende angezeigt. Wenn ich nun in Google draufklicke erhalte ich die Meldung: The requested URL /unterseite/.html was not found on this server. An was scheitert es da? Bzw. wie kann ich das beheben?
Weil wenn das nicht geht, verliere ich echt viele Besucher dadurch.
Vielen Dank

Hallo,

Wenn ich das so richtig verstanden habe, solltest Du innerhalb der .htaccess generell alles umleiten und entsprechend Content einbinden.
Die .htaccess würde dann ausreichend so aussehen:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [QSA,L]

Jetzt kannst Du bspw. mit PHP entscheiden, was passieren soll.

Ein Aufruf von meinetwegen http://www.example.com/startseite würde jetzt über die REQUEST_URI ausgelesen werden können:
[PHP]$sRequestedContent = trim( $_SERVER[‚REQUEST_URI‘], ‚/‘ );
$sFilePath = ‚dein/verzeichnis/‘ . $sRequestedContent . ‚.html‘;

if ( is_dir($sFilePath) ) {

$sContentHtml = file_get_contents( $sFilePath );

} else {

$sContentHtml = file_get_contents( 'fehlerseite.html' );

}[/PHP]…als Beispiel. Wie Du das verarbeitest kann unterschiedlich ausfallen.
Du bist aber mit der Variante am flexibelsten.

Was den DuplicateContent angeht, so kannst Du dann entsprechend in den Seiten einen Caninical setzen, dann ist das auch erledigt.

Gruß Arne

Hallo Arne!
Danke für deine Unterstützung!
Leider hab ich es nicht geschafft, es so einzurichten, dass es funktioniert. Ich bin da leider ein totaler Anfänger und muss das erst lernen. Leider hat sich nichts geändert. Gebe ich www.abc.de/untersseite ein, komm ich mit der weiterleitung auf die Unterseite ich ich möchte. Gebe ich allerdings www.abc.de/unterseite/ ein (so steht die Seite in Google auf einer Top Position) komm ich auf eine „Not found“ Seite und im Browser oben steht 404.
Gruß Dieter

Hallo,

Poste bitte den aktuellen Stand Deiner .htaccess und der verarbeitenden PHP-Datei, ansonsten wird das für uns nur ein fröhliches rumgerate.

Gerne! Aktuell habe ich folgenden Code eingebaut:

[CODE]# RewriteEnginge anschalten
RewriteEngine on

nächste RewriteRule gilt nur, wenn die Datei nicht existiert

RewriteCond %{REQUEST_FILENAME} !-f

nächste RewriteRule gilt nur, wenn es auch kein Ordner ist

RewriteCond %{REQUEST_FILENAME} !-d

nächste RewriteRule gilt nur, wenn die Anfrage nicht auf .html endet.

[NC] → Groß-Kleinschreibung egal.

RewriteCond %{REQUEST_URI} !.html$ [NC]

Hänge .html an den Dateinamen an.

[L] → Führe keine eventuell folgenden RewriteRules aus

RewriteRule ^(.*)$ $1.html [L][/CODE]

Darf ich bitte den gesamten Code haben, sodass es auch mit: http://www.meineseite/unterseite/ ( mit „/“ ) aufgerufen werden kann?
Vielen Dank für die Hilfe!

So ähnlich habe ich mir das gedacht. Dein Problem lässt sich nicht auf einfache Weise nur per .htaccess lösen, daher habe ich Dir den Weg über PHP gezeigt. Dort kannst Du flexibel darauf eingehen.
Ich kann Dir nachher gern den PHP-Code auf die Slash-Problematik anpassen, wenn Du möchtest.

Aber um PHP kommst Du nicht rum, wenn Du das geschickt lösen willst.
Was nicht heißt, dass es rein mit .htaccess nicht geht, aber ich fände die Lösung nicht sehr schön, denke ich.

Gruß Arne

Wie gesagt, ich bin da ein totaler Anfänger und bin da noch am lernen.
Ich bin für jede Lösung offen und sehr dankbar, wenn es funktionieren würde.
Wenn es mit .htaccess möglich ist, wäre das auch perfekt, denn da weiß ich schon, dass ich den Code ändern muss, abspeichern und fertig. (hoffentlich :wink: )
Bei PHP bräuchte ich eine genaue Anleitung, wie das geht.
Die Umleitung, die ich jetzt gesetzt habe, hab ich nicht ewig, sondern kommt dann wieder weg,
Danke

Ok, kann aber später werden, muß gleich nochmal weg.

Kein Problem !!!

Hallo,

Also Dein Slash-Problem löst sich eigentlich, wie schon in #8 angedeutet.
Da es scheinbar Verständnisprobleme gibt, hier nochmal im Detail ( sorry, falls der Beitrag etwas länger wird ):

Ich gehe mal nach den Beiträgen zu urteilen davon aus, dass Du einen Apache Webserver als Basis hast, denn sonst sind .htaccess Dateien i.d.R. wirklungslos. Als erstes leitest Du wie gesagt alle Anfragen auf nicht existente Dateien oder Verzeichnisse direkt auf die Datei index.php, wie bereits in #8 beschrieben:

[CODE]RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]

RewriteRule ^ index.php [QSA,L][/CODE]
In der index.php kannst Du nun das ganze analysieren und die entsprechende Seite aufrufen.

Aber wie?
Du kannst über das superglobale Array [FONT=Courier New]$_SERVER[/FONT] auf die [FONT=Courier New]REQUEST_URI[/FONT] zugreifen:
[PHP]$sRequestUri = trim( $_SERVER[‚REQUEST_URI‘], ‚/‘ );[/PHP]
Das [FONT=Courier New]trim()[/FONT] sorgt i.d.R. dafür, dass Steuerzeichen, wie Tabs oder Zeilenumbrüche am Anfang und/oder Ende der Zeichenkette entfernt werden. Mit dem zweiten Parameter [FONT=Courier New]/[/FONT] sage ich ihm allerdings, dass er ebenfalls führende und abschliessende Slashes entfernen soll, womit Dein Slash-Problem eigentlich schon gelöst ist, denn beide dieser Aufrufe:

http://www.example.com/foo http://www.example.com/foo/
werden auf die Weise als fooin [FONT=Courier New]$sRequestUri[/FONT] gespeichert, also ohne Slash! Damit sind beide Aufrufe für den Benutzer also auch Google identisch.

Jetzt kenne ich Deine grundlegende Struktur der Seiten nicht, also unterstelle ich Dir zwecks Beispiel mal eine… :stuck_out_tongue:
Ich gehe für die Weiterführung des Beispiels deshalb davon aus, dass Du einfach statische HTML-Seiten hast. Weiterhin behaupte ich einfach mal, dass diese sich im Ordner [FONT=Courier New]content/[/FONT] befinden.

Du musst jetzt nichts weiter tun, als quasi ein Mapping zu erstellen, welches dafür sorgt, dass die erwartete Seite zu den Seitenaufrufen angezeigt wird. Dafür gibt es jetzt haufenweise Möglichkeiten und sicher auch bessere, wie die folgende, aber ich möchte das Ganze an dieser Stelle einfach halten.

Folgendes Mapping ( Aufruf => Seite ) werfe ich mal als Vorlage in den Raum:

http://www.example.com/startseite => content/startseite.html http://www.example.com/kontakt => content/kontakt.html http://www.example.com/impressum => content/impressum.html
Hier ist es relativ einfach, da jeder Aufruf wie die anzuzeigende Seite heißt. Ich muß also nur einmal kurz prüfen, ob die Datei existiert. Um auf Aufrufe reagieren zu können, die keine gültige Seite mappen, gibt es wiederum mehrere Möglichkeiten, ich bestimme für dieses Beispiel mal eine eigene 404 Seite:
[PHP]$sContentFolder = DIR . ‚/content/‘;
$sContentFilePath = $sContentFolder . $sRequestUri . ‚.html‘;

if ( !is_dir($sContentFilePath) ) {

header ( 'HTTP/1.0 404 Not Found' );
$sContentFilePath = $sContentFolder . '404.html';

}[/PHP]
Jetzt habe ich in [FONT=Courier New]$sContentFilePath[/FONT] den Pfad entweder zur angeforderten Datei oder zu Deiner 404-Seite.
Als letztes brauchst Du den Inhalt nur noch ausgeben:
[PHP]echo file_get_contents( $sContentFilePath );[/PHP]

Das ganze ist i.d.R. natürlich etwas umfangreicher, bspw. sollte man den Wert von [FONT=Courier New]$_SERVER[‚REQUEST_URI‘][/FONT] filtern, bevor man den aufs Dateisystem los lässt.

Weiterhin erfordert das ganze auch weitere Logik, falls es um Aufrufe über mehrere Ebenen geht:

http://www.example.com/foo/bar/startseite

Ob das allerdings bei Dir relevant ist, kann ich nicht sagen.

Die komplette .htaccess findest Du ja in diesem Beitrag ganz oben, dazu hier nochmal die gesamte minimalistische index.php, die auf das Beispiel bezogen benötigt wird:
[PHP]$sRequestUri = trim( $_SERVER[‚REQUEST_URI‘], ‚/‘ );
$sContentFolder = DIR . ‚/content/‘;
$sContentFilePath = $sContentFolder . $sRequestUri . ‚.html‘;

if ( !is_dir($sContentFilePath) ) {

header ( 'HTTP/1.0 404 Not Found' );
$sContentFilePath = $sContentFolder . '404.html';

}

echo file_get_contents( $sContentFilePath );[/PHP]
[SIZE=3]!!! Das Beispiel dient hier nur zur Erklärung und weist in Details Unvollständigkeiten auf, auf die bewußt nicht eingegangen wurde !!![/SIZE]

Ich hoffe, das war einigermassen verständlich? Wenn nicht, einfach fragen… :slight_smile:

Gruß Arne

Hallo!
Also ich hab die von dir geschriebenen Codes eingefügt und dann ist die Seite nicht mehr erreichbar.
Welchen von den Codes soll ich nehmen? Soll ich den ersten Code nehmen und einfügen und die bestehende .htaccess löschen oder zu der bestehenden hinzufügen? Oder soll ich den einzeiligen PHP Code hinzufügen?
Sorry, aber dass du ein Profi bist, das habe ich jetzt gesehen an deiner ausführlichen Hilfe, doch leider bin ich so ein Laie, dass ich einen fertigen Code benötige, den ich einfügen kann. Welchen Server ich habe, weiß ich nicht. Allerdings haben die Seiten auf dem Server die Endung .html (index.html)
Gruß Dieter

Hallo,

einen 1:1 Copy/Paste Code kann ich Dir nicht liefern, weil ich Dein Umgebung nicht kenne.
Wenn Du selbst nicht weißt, was für einen Server Du hast, kann ich das erst recht nicht wissen :wink:

Der Code funktioniert jedenfalls, soviel kann ich sagen.

[QUOTE=Testarossa]
Welchen von den Codes soll ich nehmen? Soll ich den ersten Code nehmen und einfügen und die bestehende .htaccess löschen oder zu der bestehenden hinzufügen? Oder soll ich den einzeiligen PHP Code hinzufügen?
[/QUOTE]
Die .htaccess komplett ersetzen und PHP das komplette Script als index.php auf dem Webspace ablegen. Mehr braucht es eigentlich nicht.

Sonst mußt Du mir mal ne PN schicken, vielleicht kann ich mir das ja mal genauer ansehen…

Gruß Arne