• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage .htaccess Hilfe für html Endung

Testarossa

Neues Mitglied
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]

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.
 
Werbung:
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
 
Werbung:
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

Code:
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
 
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
 
Werbung:
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:
Code:
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' );

}
...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
 
Werbung:
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]

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
 
Werbung:
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 ;) )
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
 
Werbung:
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]
In der index.php kannst Du nun das ganze analysieren und die entsprechende Seite aufrufen.

Aber wie?
Du kannst über das superglobale Array $_SERVER auf die REQUEST_URI zugreifen:
PHP:
$sRequestUri = trim( $_SERVER['REQUEST_URI'], '/' );
Das trim() 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 / 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:
Code:
http://www.example.com/foo
http://www.example.com/foo/
werden auf die Weise als
Code:
foo
in $sRequestUri 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... :p
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 content/ 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:
Code:
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';

}
Jetzt habe ich in $sContentFilePath 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 );

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

Weiterhin erfordert das ganze auch weitere Logik, falls es um Aufrufe über mehrere Ebenen geht:
Code:
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 );
!!! Das Beispiel dient hier nur zur Erklärung und weist in Details Unvollständigkeiten auf, auf die bewußt nicht eingegangen wurde !!!

Ich hoffe, das war einigermassen verständlich? Wenn nicht, einfach fragen... :)

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 ;)

Der Code funktioniert jedenfalls, soviel kann ich sagen.

Testarossa schrieb:
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?
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
 
Werbung:
Zurück
Oben