Zur Navigation

Alle non-www auf www weiterleiten

1 qwerti

Hallo Jörg,

leider gelingt mir es nicht alle non-www Seiten auf www-Seiten weiterzuleiten.

Bsp.
https://www.mySite.de/about (funktioniert)

https://mySite.de/about (funktioniert nicht, es kommt ein 404)

die index funktioniert, nur die Unterseiten wollen nicht.

Funktioniert
https://www.mySite.de (funktioniert)
https://mySite.de (funktioniert)

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
RewriteRule (.*) https://www.%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
 
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

Der zweite und dritte Teil sorgt dafür, dass die Seiten ohne .php in der URL ausgegeben werden, wenn wer .php mit eingibt dann folgt ein 404, das soll so sein. Mir geht es also um Teil 1.

Danke vorab für die Lösung.

VG

19.07.2020 17:39

2 Jörg Kruse

https://mySite.de/about (funktioniert nicht, es kommt ein 404)

Bleibt die URL in der Adresszeile des Browsers so stehen? oder wird falsch an eine URL weitergeleitet, die es nicht gibt?

Ich würde hier zur Sicherheit noch Delimiter verwenden:

RewriteRule ^(.*)$ https://www\.%1/$1 [R=301,L]

Potentielle Störfaktoren können ggf. auch noch .htaccess Dateien in darüber liegenden Verzeichnissen sein.

19.07.2020 20:13

3 qwerti

Hallo Jörg,

dake für dein Feedback.


Bleibt die URL in der Adresszeile des Browsers so stehen? oder wird falsch an eine URL weitergeleitet, die es nicht gibt?
Der Browser/Server spuckt folgenden Fehler aus.


Gone

The requested resource is no longer available on this server and there is no forwarding address. Please remove all references to this resource.


RewriteRule ^(.*)$ https://www\.%1/$1 [R=301,L]
Habe ich mal getestet, bleibt nach wie vor gleich.

Was halt komisch ist, das es nur bei den Unterseiten nicht funktioniert.

Kann man denn die Seiten auch per 301 einzeln weiterleiten lassen? Das Problem ist, dass der Content dupliziert wird, wenn nicht per 301 weitergeleitet wird. Sprich der Index OT erkennt die Seite einmal mit www und einmal ohne www. Er merkt also dass beide verschieden sind, und das ist beim Ranking problematisch.

Fällt Die evtl. noch etwas anderes ein?

VG



19.07.2020 21:15

4 qwerti

Potentielle Störfaktoren können ggf. auch noch .htaccess Dateien in darüber liegenden Verzeichnissen sein.

ES gibt kein darüberliegendes Verzeichnis mehr. Ich habe bis dato auch noch keine andere .htaccess in irgendeinem Verzeichnis liegen.

19.07.2020 21:17

5 Jörg Kruse

Gone

The requested resource is no longer available on this server and there is no forwarding address. Please remove all references to this resource.

Das "Gone" wird wohl durch diesen Regelsatz verursacht:

RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

... der aber nur zuschlägt, wenn die URL ein ".php" enthält. Ich habe gerade dunkel in Erinnerung, dass das L-Flag nicht verhindert, dass mod_rewrite ein zweites Mal die .htaccess Datei durchläuft. Dabei können Regelsatz 2 und 3 noch zum Zuge kommen.

Füge mal auch Regelsatz 2 als zusätzliche Option hinzu, dass der Host nicht auf www. beginnen darf:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

... und ggf. auch noch in Regelsatz 3, falls das allein nicht hilft

19.07.2020 22:02

6 qwerti

Hi Jörg,

danke, Teil 2 funzt schon mal.

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]


Teil 3 leider nicht

Wenn ich nun aber in Teil 3 die Option ebenfalls hinzufüge dann hebt er die .php Endung wieder auf, d.h. er zeigt sie wieder mit an, was ist hier falsch?

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

19.07.2020 22:17

7 Jörg Kruse

Tut mir leid, ich kann die Problematik noch nicht so ganz nachvollziehen.

danke, Teil 2 funzt schon mal.

Was bedeutet das genau: dass die "Gone"-Fehlermeldung nicht mehr angezeigt wird? wird der korrekte Inhalt angezeigt und wird auf die www. URL weitergeleitet?

Nochmal zurück zu dieser Frage:

Bleibt die URL in der Adresszeile des Browsers so stehen? oder wird falsch an eine URL weitergeleitet, die es nicht gibt?

Du hattest die Fehlermeldung wiedergegeben, was für eine Fehleranalyse hilfreich ist. Aber welche URL steht in der Adresszeile? hat sich diese in irgendeiner Form geändert gegenüber der eingegebenen URL?

Wichtig ist es übrigens auch beim Testen von 301-Weiterleitungen, den Browser-Cache zu deaktivieren bzw. nach jeder Änderung der .htaccess Datei den Cache zu leeren.

20.07.2020 11:23 | geändert: 20.07.2020 11:31

8 qwerti


Was bedeutet das genau: dass die "Gone"-Fehlermeldung nicht mehr angezeigt wird? wird der korrekte Inhalt angezeigt und wird auf die www. URL weitergeleitet?

Richtig, es wird keine Fehlermeldung mehr ausgegeben, stattdessen wird nun bei der URL das .php wieder angehangen.

Das ganze passiert wenn ich folgende Code anwende.

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

Also sprich eigentlich funktioniert es, ABER jetzt exisiteren wieder zwei verschiedene Versionen. Wenn ich also im Browser das www bei der URL entferne, wird zwar wieder auf www umgeleitet, allerdings wird in der URL wieder .php mit angezeigt, das sollte ja so nicht der Fall sein.

Version 1.
https://www.myPage.de/about

Also wenn ich bei Version 1. das www entferne, steht Version 2. als URL im Browser.

Version 2.
https://www.myPage.de/about.php

Also was genau muss man bei dem 3. Teil noch anpassen, damit er jetzt nicht mehr das .php mit anzeigt. Mit den zwei Versionen habe ich leider wieder genau das gleiche Problem bzgl. doppelter Content, das ist schlecht für die BOTs.

Hoffe ich konnte es bestmöglichst rüberbringen.

VG und danke vorab





20.07.2020 12:49

9 Jörg Kruse

Irgendwas ist da noch faul.

Ich habe diesen Code mal getestet:

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
RewriteRule (.*) https://www.%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
 
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

und diesen unter https://example.com/.htaccess gespeichert.

Dann ich habe ich diese URL aufgerufen:

https://example.com/foo

... und werde weiter geleitet nach:

https://www.example.com/foo

... wobei der Inhalt von foo.php angezeigt wird.

Rufe ich diese URL auf:

https://www.example.com/foo.php

... dann erhalte ich die Fehlermeldung "Gone"

Das Problem, was du da hast, liegt also wohl nicht in dem .htaccess Code, den du hier eingestellt hast.

Mögliche Fehlerquellen sind:

1. der Cache deines Browsers (vor jedem Test leeren!)

2. weiterer .htaccess Code, den du hier noch nicht gepostet hast

3. ein (PHP-)Script, welches zwischendrin noch weiterleitet

4. eine Webserver-Konfiguration, die auch noch Rewrites oder andere störende Direktiven enthält

20.07.2020 17:11

10 qwerti

Hallo Jörg,

danke nochmal für dein Feedback.

Habe den FTP nochmal komplett leer geräumt und einen Test gefahren. Egal was ich mache, ob ich die non-www oder www Variante wähle, es kommt immer der selbe Fehler raus, doppleter Content.

IONOS (1&1) hat wohl noch über meinem Hauptverzeichnis eine .htaccess liegen welche nicht einsehbar ist, muss ich wohl mal die Technik anrufen, das geht so gar nicht.

Bei IONOS ist es egal ob man die Endung .php mit eingibt oder nicht, ohne dass man irgendein Code in seiner .htaccess hat. Genau das führt zu dem relevanten Fehler des doppelten Contents. Der Fehler wird durch das non-www bzw. www verursacht. Da muss seitens IONOS ein Weiterleitungsfehler vorliegen.

Ein Bsp. ich rufe im Browser folgende URL auf. Das einzige was in der .htaccess aktiv ist, ist die hhtp auf https Umleitung.

https://www.myPage.de/test

So weit so gut, wenn ich nun aber bei der obigen URL das www wegnehme, zeigt die rowser URL folgendes an.

https://www.myPage.de/test.php

Es wird also automatisch das .php der URL wieder mit angehangen. UND ES WIRD EIN 410 FEHLER ERZEUGT. Das kann doch so nicht richtig sein. Da muss wohl was mit deren Einstellung falsch sein.

IONOS hat von Haus aus einen Ordner via logs auf dem FTP, in diesem Ordner befindet sich ebenfalls eine .htaccess. Den Ordner bzw. die -htaccess lässt sich aber nicht löschen. Habe mir die .htaccess angeschaut, da steht eigentlich nichts weiter drin was das beeinflussen könnte. Hier mal der Code dieser Datei.

Options +Indexes
RemoveHandler .html
RemoveType .html
AddType text/html .html
Satisfy any
Order Deny,Allow
Allow from 212.XXX.XXX.XXX
Deny from all
AuthType Basic
AuthName "Access to /logs"
AuthUserFile /kunden/homepages/XX/XXXXXXXXX/htpasswd
Require user uXXXXXXXX

Kann dieser Code in einem Übergelagerten Ordner das Ganze so beinflussen?

VG

21.07.2020 08:34