Doppelten Content vermeiden mit RewriteEngine

Hallo liebe Community,

um doppelten Content zu vermeiden habe ich eine .htaccess erstellt mir folgendem Inhalt:

RewriteEngine On RewriteCond %{HTTP_Host} ^wissen-script\.de$ [NC] RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [R=301,L]

Nach dem Einsatz dieser Datei erscheinte nur noch folgende Meldung, nach dem Aufruf der Internetseite: [quote]Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@bplaced.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.2 Server at quamm.de Port 80[/quote]

Was muss ich tun um wissen-script.de umzuleiten?

Liebe Grüße

MaxT :wink:

Versuchs mal mit: RewriteCond %{HTTP_HOST}

Halloe fishi,

vielen Dank für deine schnelle Antwort. Leider ändert dies nichts an der Fehlermeldung.
Mir fällt gerade auf, dass es sich eigentlich sogar um vierfachen Content handelt. Gleiches Problem gibt es schließlich noch mit wissen.bplaced.net.

Und unter .de gibt es das gleiche Spiel nocheinmal. Wie leite ich die denn nun alle um? :neutral_face:

Den vielfachen Möglichkeiten die Webseite zu erreichen, kannst du eliminieren, indem die Bedingung so aussieht:

RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.wissen-script\.de$ [NC]
RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [R=301,L]

(Ich habe jetzt nur deinen Code verändert, wird also wahrscheinlich auch noch nich laufen, aber ich hoffe du hast das Prinzip verstanden. Man beachte das Ausrufezeichen!)

Hallo zvn,

danke für deine Antwort, ob ich die .htaccess nun für Linux oder Windows schreibe, es zeigt den selben Fehler.

Hatte nun zwischenzeitlich versucht mit PHP auf jeder Seite die aufgerufene URL auszulesen und einfach weiterzuleiten, leider hat mir print_r($_SERVER); gezeigt dass gar nicht abgerufen werden kann ob nun die Seite mit oder ohne www aufgerufen wurde.

Lässt sich das Problem vielleicht auf einen anderen Weg lösen?

Liebe Grüße

MaxT :wink:

Ich hatte es selbst auf diese Art auf einer Seite gelöst gehabt:

RewriteEngine On RewriteCond %{HTTP_HOST} !^(www\.wissen\-script\.de)$ RewriteRule ^(.*)$ http://www.wissen-script.de%{REQUEST_URI} [R=301]
REQUEST_URI, damit auch der Querystring mit kommt.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.wissen\-script\.de$ [NC]
RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [R=301,L]

So wär’s mal noch einen Versuch wert.

zvn: Du hast RewriteBase nicht verstanden :wink:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.wissen\-script\.de)$
RewriteRule   -   http://www.wissen-script.de%{REQUEST_URI} [R=301]

Danke für die zahlreichen, neuen Antworten, leider führen diese auch nicht ins Ziel. Es erscheint immer oben genannter Fehler.

Speichere ausschließlich den Code in einer “.htaccess”-Datei und die lege diese ins Hauptverzeichnis, daran sollte es nicht liegen.

Liebe Grüße

MaxT :wink:

Na, dies sollte funktionieren – selbst getestet und alles. Der Query-String wird auch übernommen, dank QSA.

RewriteEngine On RewriteCond %{HTTP_HOST} !=www.wissen-script.de [NC] RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [L,NC,NE,QSA,R=301]
Den Bindestrich als Rewrite-Muster zu nehmen hört sich in der Theorie gut an, weil man ja dort nicht wirklich irgendwas matchen muss, allerdings ignoriert Apache dann die komplette Regel und schaut sich nur die [flags] an.

Hallo Scram,

habe nun noch einmal alle genannten Lösungen versucht, auch mit einer Domain die nur aus einem Wort besteht. Leider will nichts funktionieren. Wieso bekomme ich immer diese Fehlermeldung?

Ich bin übrigens bei united-domains, falls das etwas zur Sache tut.

Liebe Grüße

MaxT :wink:

Dann hast du kein mod_rewrite

Werde mich bei united-domains erkundigen, aber wie kann es sein dass folgendes funktioniert:

[code]RewriteEngine on

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

RewriteRule ^(.*)$ index_dynamisch.php?url=$1 [L,NC,QSA][/code]

Liebe Grüße

MaxT :wink:

Das ist seltsam, aber ich bin mir ziemlich sicher, dass meine Lösung funktioniert – deine ursprüngliche sollte das eigentlich auch tun.

Speicherst du das vielleicht aus Versehen[ul][li]als Rich Text[/li][li]als UTF-8 mit byte order mark[/li][li]mit Mac-Zeilenumbrüchen[/li][/ul]ab?

Vielen Dank, mit der Kodierung “UTF-8 ohne BOM” (was sich mir eben erst als “UTF-8 mit byte order mark” ergab) funktioniert das Ganze einwandfrei.

Allerdings lassen sich die zwei anderen Domains noch nicht umleiten.

RewriteEngine On RewriteCond %{HTTP_Host} ^wissen-script\.de$ [NC] RewriteCond %{HTTP_HOST} ^*wissen-script\.bplaced\.net$ [NC] RewriteCond %{HTTP_HOST} ^*wissen-script\.bplaced\.de$ [NC] RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [R=301,L]

Liebe Grüße

MaxT :wink:

Jaja, das byte order mark – ziemlich fies, schon weil man’s nicht sieht. :ps:

  • ist ein Quantor in regulären Ausdrücken. „Irgendwelche Zeichen beliebig oft“ wäre .*

Und wenn du einfach alle Domains nach www.wissen-script.de umleiten willst, den Code habe ich schon gepostet.

Wie es scheint habe ich nun ein anderes Problem. Im Order “wissen” existiert folgende .htaccess

[code]RewriteEngine on

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

RewriteRule ^(.*)$ index_dynamisch.php?url=$1 [L,NC,QSA][/code]
Wird nun wissen-script.de/wissen/gold-ist … r-als-blei aufgerufen, wird “gold-ist-schwerer-als-blei” an die index_dynamisch.php als Variable weitergegeben die aus der Datenbank den passenden Inhalt ausgibt und dadurch einen Order simuliert.

Wie es scheint lässt sich dies allerdings nicht so einfach mit der .htaccess im Hauptverzeichnis kombinieren.

RewriteEngine On RewriteCond %{HTTP_HOST} !=www.wissen-script.de [NC] RewriteRule ^(.*)$ http://www.wissen-script.de/$1 [L,NC,NE,QSA,R=301]

Einfach die Zeilen RewriteCond einfügen oder vor den Pfad in der RewriteRule die URL hinzufügen funktoniert leider nicht.

Wie muss ich die .htaccess im Verzeichnis “wissen” umschreiben damit die Weiterleitungen funktionieren wie bei der .htaccess im Hauptverzeichnis? (Also alle Weiterleitungen und hinter die Ordner wird ein “/” angehängt.)

Liebe Grüße

MaxT :wink:

Jetzt wird’s schon komplizierter.

Problem 1, Rewrite-Regeln werden standardmäßig nicht vererbt.
Lösung: RewriteOptions inherit.

Problem 2, die Rewrite-Regel nimmt dann den Unterordner als Basis, d.h. es würde nach www.wissen-script.de/gold-ist-schwerer-als-blei umleiten.
Lösung: %{REQUEST_URI}.

Problem 3, Rewrite-Regeln, die im Ordner direkt definiert werden, haben Vorrang, und REQUEST_URI würde umgeschrieben werden.
Lösung: noch 'ne RewriteCond.

Na, ich denk, jetzt hab’ ich’s dann. :ps:

RewriteEngine On RewriteCond %{HTTP_HOST} !=www.wissen-script.de [NC] RewriteRule .* http://www.wissen-script.de%{REQUEST_URI} [L,NC,NE,QSA,R=301]

[code]RewriteEngine on
RewriteOptions inherit

RewriteCond %{HTTP_HOST} =www.wissen-script.de
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index_dynamisch.php?url=$1 [L,NC,QSA][/code]

Danke für die viele Arbeit,

leider scheint noch eine Kleinigkeit zu fehlen. Wenn ich nun wissen-script.de/wissen/startseite/. (Gleiches passiert wenn die beiden Subdomains aufgerufen werden.)

Wenn ich wissen-script.de/wissen/startseite aufgerufen werden und es wird nicht automatisch ein Schrägstrich angefügt wie es die .htaccess im root-Verzeichnis macht. (Ob nun mit oder ohne Schrägstrich ist eigentlich unwichtig, hauptsache einheitlich)

Habe nun versucht einfach “/wissen” an die URL in der .htaccess anzuhängen die sich im Ordner “wissen” befindet da dies ja fehlte. Allerdings will das nicht funktionieren. :neutral_face:
Irgendetwas scheint da noch Krumm zu sein.

Liebe Grüße

MaxT :wink:

Und du hast beide .htaccess angepasst? Das Problem hatte ich beim Testen auch, allerdings hat es funktioniert, nachdem ich statt $1 %{REQUEST_URI} genommen habe.