Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Aufrufe mit .html auf selbes Ziel ohne .html umleiten?

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 22.04.2012, 10:43

Da für mich mod_rewrite noch immer ein Buch mit sieben Siegeln ist, frag ich lieber bevor mir alle Haare ausfallen. *gg*
Ich möchte gerne als meine URL's die mit dem .html suffix aufgerufen werden, auf die selbe URL ohne .html Suffix umleiten. Also:

Code: Alles auswählen

example.org/reiseberichte.html > example.org/reiseberichte
example.org/maingallery/laenderstaedte.html > example.org/maingallery/laenderstaedte 
usw.

:o

/edit
Lösung:

Code: Alles auswählen

RewriteRule ^(.+)\.html$ /$1 [L,R=301]

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 22.04.2012, 17:01

Man, ich versteh einfach nicht was bei meiner Seite los ist.
Bei jeder URL kann man bei mir so viele .html's hintereinander angeben wie man möchte?? :evil: Also z.b.:

example.org/reiseberichte.html.html.html

Die Seite wird problemlos aufgerufen. :cry: Weiß jemand wie ich obige Regel umbauen müsste um das auch noch abzufangen?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 22.04.2012, 18:32

thomas_x3 hat geschrieben:Lösung:

Code: Alles auswählen

RewriteRule ^(.+)\.html$ /$1 [L,R=301]
Das ist keine Lösung, das ist eine Weiterleitung!
thomas_x3 hat geschrieben:Man, ich versteh einfach nicht was bei meiner Seite los ist.
Ein Punkt außerhalb einer [Zeichenklasse] ist ein Metazeichen und steht zusammen mit dem + für beliebig viele weitere Zeichen, also zum Beispiel auch für weitere .html. Ich habe ja schon überlegt, doch wenn ich das jetzt so schreiben würde, dann würde der Apache versuchen, für alle aufgerufenen URLs, die keinen Punkt enthalten, eine URL mit .html auszuliefern.

Code: Alles auswählen

RewriteRule ^([^.]+)$ /$1.html [L]
Das kann es eigentlich noch nicht sein, weil der da wohl mit den Verzeichnissen durcheinander kommen würde. Einfacher ging es, wenn es sich um eine überschaubare Anzahl an Verzeichnissen handeln würde. Dann kann man für jedes Verzeichnis eine Regel angeben, mit den Zeichen, die enthalten sein können. Beispiel:

Code: Alles auswählen

RewriteRule ^haushalt/([a-z_-]+)-([0-9]+)$ /haushalt/$1-$2.html [L]
In dem Fall sollte bei Aufruf von haushalt/neue-besen-72 die Seite haushalt/neue-besen-72.html im Hintergrund laden.

Vielleicht könnte das mit ein, zwei und drei Verzeichnisebenen so aussehen, ist aber nur ein Gedanke und nicht getestet:

Code: Alles auswählen

RewriteRule ^([^./]+)$ /$1.html [L]
RewriteRule ^([^./]+)/([^./]+)$ /$1/$2.html [L]
RewriteRule ^([^./]+)/([^./]+)/([^./]+)$ /$1/$2/$3.html [L]

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 22.04.2012, 21:40

Die bisherigen Beispiele gingen nur in einer Richtung, was bedeutet, die URLs müssen auch so aufgerufen werden. Wenn bei Eingabe einer älteren URL mit .html die URL auch in der Browserzeile umspringen soll, sehen die Regeln etwas komplizierter aus. Sind nur ungetestete Beispiele, die Fehler enthalten können:

rufe auf: "https://www.example.com/gallery"
liefere aus: "https://www.example.com/gallery.html"

Code: Alles auswählen

RewriteRule ^([a-z]+)$ /$1.html?nur=so [QSA,L]
RewriteCond %{QUERY_STRING} !^nur=so$
RewriteRule ^([a-z0-9_-]+)\.html$ /$1 [R=301,L]
rufe auf: "https://www.example.com/reisen/236-land"
liefere aus: "https://www.example.com/reisen/236-land.html"

Code: Alles auswählen

RewriteRule ^reisen/([a-z0-9_-]+)$ /reisen/$1.html?nur=so [QSA,L]
RewriteCond %{QUERY_STRING} !^nur=so$
RewriteRule ^reisen/([a-z0-9_-]+)\.html$ /reisen/$1 [R=301,L] 

thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 23.04.2012, 10:39

Hallo Melegrian!

Also erstmal vielen Dank für deine ausführliche Antwort!
Melegrian hat geschrieben:Die bisherigen Beispiele gingen nur in einer Richtung, was bedeutet, die URLs müssen auch so aufgerufen werden.
Genau, das war der Grund für meine Weiterleitung. Ich möchte Joomla umstellen kein .html mehr anzufügen, die bisherigen Backlinks enthalten aber natürlich das .html Suffix, weshalb es unbedingt eine Umleitung sein muss.

Bei den ganzen Regeln die du da präsentierst bekomm ich ein Brett vor'm Kopf :-? irgendwie hab' ich das Gefühl, die Regeln sind viel komplizierter als sie sein müssten? Der schlanke Einzeiler in meinem 2. Post löst ja erstmal den größten Teil des Problems, oder?

Code: Alles auswählen

RewriteRule ^(.+)\.html$ /$1 [L,R=301]
Eigentlich bräuchte es ja nur noch was, dass alles hinter dem ersten ".html" nicht übergeben wird, geht das nicht mit einem "?" oder so?

Danke für deine Hilfe!! :-)

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 23.04.2012, 11:18

Du müsstest zuerst einmal unterscheiden zwischen Weiterleitung und Umschreibung. Angenommen Du hast den Inhalt eines Verzeichnisses oder eine einzelne Datei umbenannt oder verschoben, dann bedarf es einer Weiterleitung. Beispiel:

altes-Verzeichnis/alte-Seite.html wurde verschoben in /neues-Verzeichnis/alte-Seite.html

oder:

altes-Verzeichnis/alte-Seite.html wurde verschoben in /neues-Verzeichnis/neue-Seite.html

In diesem Fall erreichst Du mit einer 301-Weiterleitung, dass eine Suchmaschine weiß, dass die "altes-Verzeichnis/alte-Seite.html" zukünftig unter "neues-Verzeichnis/neue-Seite.html" erreichbar ist.

Du möchtest aber nichts verschieben, Du möchtest nur dass die URLs von mit .html auf ohne .html umgeschrieben werden. In diesem Fall ist eine Weiterleitung fehl am Platz und es bedarf nur einer einfachen Umschreibung. Eine Umschreibung teilt nur dem Server mit, dass er für "altes-Verzeichnis/alte-Seite" die Seite "altes-Verzeichnis/alte-Seite.html" ausliefern und anzeigen soll, ohne deren eigentliche URL mit .html bekanntzugeben.

Die einfache Umschreibung ist bei neu angelegten Seiten völlig ausreichend, zum Beispiel um einen Query-String in eine sauber aussehende URL zu verwandeln. Problematisch wird es eigentlich erst dann, wenn die alte Schreibweise bereits den Suchmaschinen bekannt ist. Dann müssen die alten URLs nicht nur umgeschrieben werden, sondern zusätzlich noch auf die neuen URLs umgeleitet werden. Damit aus der Umleitung keine Endlosschleife wird, erhalten die URLs noch einen zusätzlichen Parameter, der dann für die Umleitung gesperrt wird.

Also lieber Apache, bei Aufruf von "altes-Verzeichnis/alte-Seite" liefere "altes-Verzeichnis/alte-Seite.html" aus, hänge noch "?nur=so" an, zeige aber nur die URL "altes-Verzeichnis/alte-Seite" an. Und lieber Apache, bei Aufruf von "altes-Verzeichnis/alte-Seite.html" leite diese um auf "altes-Verzeichnis/alte-Seite", leite aber nicht die "altes-Verzeichnis/alte-Seite.html?nur=so" um, weil die ohnehin niemand kennt und deshalb nicht aufrufen wird und der zusätzliche Parameter nur eine Endlosschleife verhindern soll.

Edit: Und einfach wäre es, wenn Du zum Beispiel nur aus .php .html machen möchtest.

Code: Alles auswählen

RewriteRule ^(.*)\.php$ /$1.html [L]
Doch Du möchtest die Extension völlig abhängen und ich weiß nicht, wie dann bei einer Umschreibung eine Datei von einem Verzeichnis unterschieden werden sollte. Probieren kannst Du es, doch nicht das der dann bei Verzeichnissen auch nach Dateien mit .html sucht. Ich hätte es ja mal probiert, nur um zu sehen was dabei herauskommt. Da ich aber mit einem anderen Script beschäftigt bin, habe ich da jetzt weder Lust noch Zeit einige Tests durchzuführen, so dass ich diese gerne Dir überlasse.

thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 23.04.2012, 11:37

Ich denke da liegt ein grundsätzliches Mißverständnis vor:
Melegrian hat geschrieben: Du möchtest aber nichts verschieben, Du möchtest nur dass die URLs von mit .html auf ohne .html umgeschrieben werden. In diesem Fall ist eine Weiterleitung fehl am Platz
Das ist nicht genau das was ich möchte. Ich möchte nicht das sie umgeschrieben werden, ich möchte definitiv eine Umleitung auf ohne.html! Ich bin mehr der Unterschiede schon bewusst.

Mal kurz zum Hintergrund, das klärt das Ganze vielleicht. Ich migriere meine Seite (siehe Signatur) derzeit von J1.5 auf J2.5. Die 2.5er Version ist hier erreichbar: spotcatch.net/jupgrade
Die alte Version benutzt den .html Suffix, bei der neuen möchte bzw. habe ich das deaktiviert, rein aus SEO gesichtspunkten. Ansonsten hat sich nichts geändert, die Verzeichnisse und Pfadnamen sind alle gleich! Bei der neuen Version möchte ich einerseits meine Seite für Suchmaschinen weiter optimieren (deshalb das Deaktivieren des Suffix) und andererseits unbedingt duplicate content verhindern, deshalb muss hier eine dauerhafte Umleitung der bisherigen Backlinks mit .html Suffix zu denen ohne .html Suffix gemacht werden. Sonst nichts, da sich an den Pfaden bzw. Verzeichnissen nichts geändert hat.

Wie gesagt hätte das alles der obige Einzeiler meiner Meinung nach bereits gelöst, wenn da eben das Problem nicht wäre, dass man an die URL's soviele suffixe anhängen kann wie man lustig ist. Das möchte ich unbedingt vermeiden, weil ich natürlich keinen duplicate content haben möchte.

/edit
Melegrian hat geschrieben: und ich weiß nicht, wie dann bei einer Umschreibung eine Datei von einem Verzeichnis unterschieden werden sollte.
Garnicht, weil ich das auf meiner Seite nicht brauche, schließlich stelle ich ja nirgens Verzeichnisse dar...?
Zuletzt geändert von thomas_x3 am 23.04.2012, 12:01, insgesamt 1-mal geändert.

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 23.04.2012, 11:45

Na dann probiere mal diese Schreibweise:

Code: Alles auswählen

RewriteRule ^([^.]+)\.html$ /$1 [L,R=301]
Oder packe ohne ^ in [ ] alles an Zeichen hinein, was enthalten sein darf:

Code: Alles auswählen

RewriteRule ^([a-zA-Z0-9/_-]+)\.html$ /$1 [L,R=301]

thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 23.04.2012, 12:06

ok langsam nähern wir uns. ^^

Die beiden Regeln berücksichtigen aber leider nicht das Problem weshalb ich den Thread überhaupt aufgemacht habe, eben das es möglich ist, mehrere Suffixe am Ende einer URL anzuhängen und dadurch die Umleitungsregel zu der selben URL ohne Suffix(e) NICHT greift.

Danke für deine Geduld, bin dir echt dankbar für Deine Bemühungen!!

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 23.04.2012, 12:11

Berücksichtigen sie sehr wohl, da in der ersten Regel vor dem mit einem .html endenden Muster kein Punkt in der URL vorkommen darf und in der zweiten Regel nur Buchstaben, Ziffern, Schrägstriche, Unterstriche und Bindestriche aber keine weiteren Punkte vor dem mit einem .html endenden Muster erlaubt sind.

Wenn ich so etwas unter Localhost teste, muss ich bei jedem einzelnen Test erst den Cache leeren, um zu aussagekräftigen Ergebnissen zu kommen.

thomas_x3
PostRank 5
PostRank 5
Beiträge: 214
Registriert: 09.03.2012, 08:41

Beitrag von thomas_x3 » 23.04.2012, 12:30

So gehts:

Code: Alles auswählen

RewriteRule ^([^.]+)\.html /$1 [L,R=301]

Davina
PostRank 2
PostRank 2
Beiträge: 31
Registriert: 13.02.2012, 19:31

Beitrag von Davina » 01.05.2012, 10:17

Ich möchte dieses Thema gerne noch einmal aufgreifen, da ich diese Umleitung umgekehrt anwenden möchte, also von:

www.meine-seite/test auf www.meine-seite/test.html

Den Code von Melegrian habe ich probiert. Da tut sich bei mir aber nix.

Code: Alles auswählen

Code:
RewriteRule ^([a-z]+)$ /$1.html?nur=so [QSA,L]
RewriteCond %{QUERY_STRING} !^nur=so$
RewriteRule ^([a-z0-9_-]+)\.html$ /$1 [R=301,L]
Ich möchte auch keine Umschreibung, sondern wirklich eine Weiterleitung 301. Genauso wie Melegrian geschrieben hat.

Hat da jemand noch ein Tipp für mich?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 01.05.2012, 12:10

Probiere mal:

Code: Alles auswählen

RewriteRule ^([^./]+)$ /$1.html [L,R=301]
Bei mehreren Ebenen:

Code: Alles auswählen

RewriteRule ^([^./]+)$ /$1.html [L,R=301]
RewriteRule ^([^/]+)/([^./]+)$ /$1/$2.html [L,R=301]
RewriteRule ^([^/]+)/([^/]+)/([^./]+)$ /$1/$2/$3.html [L,R=301]

Davina
PostRank 2
PostRank 2
Beiträge: 31
Registriert: 13.02.2012, 19:31

Beitrag von Davina » 01.05.2012, 13:10

Danke Melegrian.

Es funktioniert aber irgendwie nicht bei allen Seiten. :-(
Einige leitet er auf .html um und andere zeigt er immer noch ohne an.
Woran kann das liegen?

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 01.05.2012, 14:57

Davina hat geschrieben:Es funktioniert aber irgendwie nicht bei allen Seiten. :-(
Einige leitet er auf .html um und andere zeigt er immer noch ohne an.
Bei der obersten Ebene bereits oder ab wann?
Worin unterscheiden die URLs sich?

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag