Seite 1 von 1

Wenn 404 dann 301

Verfasst: 14.10.2011, 19:09
von Sololand
Hallo,

ich habe eine sehr alte damals recht hochfrequentierte Seite gekauft die mehrere 100 Unterseiten hatte. Diese möchte ich gern mit 301 weiterleiten, ich kann aber nicht jede unterseite weiterleiten, der Dateiname belibt bei einer normalen Gesamt 301 WL vorhanden fliegt also raus. Also habe ich vor das alle 404 per 301 auf die Startseite leiten.

Habe im Internet u.g. Code gefunden, der geht auch, es kommt nur kein 301 sondern ein 302 dabei raus, aht jemand eine elegantere Lösung?


ErrorDocument 404 https://www.domain.de/index.php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+).(de)
RewriteRule ^(.*) https://www.%1.%2/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html?|php)\ HTTP/
RewriteRule ^index\.(html?|php)$ https://www.domain.de/ [R=301,L]

LG
Nobbi

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

Verfasst: 14.10.2011, 23:49
von mano_negra
Diese möchte ich gern mit 301 weiterleiten, ich kann aber nicht jede unterseite weiterleiten, der Dateiname belibt bei einer normalen Gesamt 301 WL vorhanden fliegt also raus
fliegt raus?

mit rewriteRule sollte das doch gehen.

Verfasst: 15.10.2011, 11:48
von Sololand
grundsätzlich spricht nichts gegen aber 1000 unterschiedlichste Verzeichnisse und Seiten teilweise sowas domain.de/jkdsi.html und www2.domain.de/dhdh, www3.domain.de/sdds.html. War halt früher so auf der Domain war die Lycos/Fireball Suchdatenbank mit angeschlossen, ist halt eine alte Domain von Lycos noch ;)

Klar könnte ich jetzt nen 301 seiten aber das würde nur gehen, wenn ich zu jeder site eine eigene erstelle aber wer schafft das?

Wenn ich auf die domains und subdomain einen 301 setze, dann wird aus:

www3.domain.de/sdds.html
www.domain.de/sdds.html und das bringt mir noch weniger weil ja die sdds.html auch nicht existiert. Also will ich 2 fliegen mit einer klappte schlagen und möchten dem server sagen, wenn die seite nicht existiert(404), dann leite die Seite permanent auf die Startseite ohne das der Trust auf der Unterseite für immer verloren geht.

Verfasst:
von

Verfasst: 15.10.2011, 13:38
von Melegrian
Probiere es doch mal ohne http:, also nur mit

ErrorDocument 404 /index.php

denn unter ErrorDocument-Direktive steht:
URLs können bei lokalen Webpfaden mit einem Schrägstrich (/) beginnen (relativ zum DocumentRoot-Verzeichnis) oder eine vollständige URL bilden,.....
.....
Wenn Sie eine ErrorDocument-Anweisung angeben, die auf eine entfernte URL weist (d.h. irgendetwas mit der Methode http davor), beachten Sie bitte, dass der Apache eine Umleitung zum Client sendet, um diesem mitzuteilen, wo das Dokument zu finden ist, auch wenn das Dokument letztlich wieder zum gleichen Server führt. Das hat mehrere Auswirkungen. Die wichtigste ist, dass der Client nicht den Original-Statuscode erhält sondern statt dessen einen Umleitungs-Statuscode.
https://httpsd.apache.org/docs/2.0/mod/core.html

Habe mal die unteren Zeilen weggelassen und nur die erste Zeile verwendet, da wohl ohnehin zuerst die obere Zeile abgearbeitet wird.

Code: Alles auswählen

ErrorDocument 404 http://www.meine-domain.de/index.htm
Dann eine nicht existierende Seite aufgerufen und das Ergebnis sieht sauber nach 301 aus:

Code: Alles auswählen

http://localhost/test/fehlt.htm

GET /test/fehlt.htm HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

HTTP/1.1 301 Moved Permanently
Date: Sat, 15 Oct 2011 16:01:50 GMT
Server: Apache/2.2.12 (Win32) ..................
Location: http://www.meine-domain.de
Content-Length: 408
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

Verfasst: 15.10.2011, 23:42
von Sololand
Hallo,

das sieht in der tat nach einem 301 aus, nur nicht bei mir, ich versteh das nicht, da muss doch was an meinem Server falsch konfiguriert sein.

HTTP/1.1 302 Found
Date: Sat, 15 Oct 2011 22:39:45 GMT
Server: Apache/2.2.16 (Debian)
Location: https://www.xxxxx.de/index.php
Vary: Accept-Encoding
Content-Length: 297
Connection: close
Content-Type: text/html; charset=iso-8859-1

Verfasst: 16.10.2011, 00:03
von Melegrian
Mal hat es funktioniert mit 301 und dann wieder nicht, wo wieder nur 302 kam. Doch so sollte es gehen. Kein ErrorDocument 404 ausgeben, sondern alle Aufrufe weiterleiten, die auf nicht vorhandene f (file) d (directory) und l (link) verweisen.

Code: Alles auswählen

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\.domain\.de$ 
RewriteRule ^(.*)$ http://www. domain.de/$1 [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://www. domain.de/ [L,R=301]

Verfasst: 16.10.2011, 00:45
von Melegrian
Also, das klappt. Habe das jetzt zur Sicherheit noch einmal mit zwei Domains getestet, keine Probleme. Mit einer funktioniert es genau so.

Code: Alles auswählen

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\.domain-Eins\.de$ 
RewriteRule ^(.*)$ http://www.domain-Eins/$1 [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://www.domain-Zwei.de/ [L,R=301]
Die 777888999.htm existiert nicht:

Code: Alles auswählen

http://www.domain-Eins.de/777888999.htm

GET /777888999.htm HTTP/1.1
Host: www. domain-Eins.de
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

HTTP/1.1 301 Moved Permanently
Date: Sat, 15 Oct 2011 23:29:38 GMT
Server: Apache
Location: http://www.domain-Zwei.de/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 192
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
----------------------------------------------------------
http://www.domain-Zwei.de/

GET / HTTP/1.1
Host: www. domain-Zwei.de
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

HTTP/1.1 200 OK
Date: Sat, 15 Oct 2011 23:29:39 GMT
Server: Apache/2.2.21 (Unix) 
Last-Modified: Sun, 09 Oct 2011 16:02:20 GMT
Etag: "38886a-332d-4aedfcc993c34"
Accept-Ranges: bytes
Content-Length: 13101
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Content-Type: text/html

Verfasst: 16.10.2011, 01:20
von Sololand
Der Code funzt bei mir leider nicht, dann werden alle Unterseiten auf die Startseite geleitet, vermutlich weil die files selbst mit mod_rewrite erzeugt werden und daher nicht gefunden werden, sieht aber nach einer interessanten Lösung aus...

---

Ja das geht aber nur mit dem Script original URL nicht mit den files die selbst von mod_rewrite erzeugt werden^^

Ahhhr, danke für deine Mühe, hätte ich mir auch einfacher vorgestellt

vvlt. habe ich das auch falsch gemacht:

Code: Alles auswählen

RewriteRule ^E-Mail-agb.html$ /index.php?action=tos [QSA,L]

Verfasst: 16.10.2011, 12:21
von Sololand
Ich habs juhuuuuuu

also ich habe es nun doch so gemacht, auf dem apache die error URL "error.php" definiert und dann in die error.php...

Code: Alles auswählen

<?php
// Permanent redirection
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www. domain.de/"&#41;;
exit&#40;&#41;;
?>
danke für die hilfe !!!

Verfasst: 16.10.2011, 13:15
von mano_negra
du hast domain A und domain B und möchtest alle seiten von A auf die startseite von B leiten?

oder habe ich dich falsch verstanden?

wenn nicht, macht man das meiner meinung nach so:
auf die domain A kommt diese .htaccess:

Code: Alles auswählen

RewriteEngine on
RewriteRule &#40;.*&#41; http&#58;//www.domainB.de/? &#91;L,R=301&#93;
was du machst ist eine umleitung von A auf eine unterseite B die nicht existiert, 404 ausgeben die dann auf die startseite von B weiterleitet. ziemlich umständlich.

Verfasst: 16.10.2011, 13:29
von Melegrian
mano_negra hat geschrieben:alle seiten von A auf die startseite von B leiten
Ich hatte das so verstanden. Nicht alle Seiten, nur alle Aufrufe von fehlenden Seiten zur Startseite leiten und zwar so, dass statt Statuscode 404 ein 301 Statuscode ausgegeben wird. Die vorhandenen Seiten sollen hingegen nicht zu Startseite umgeleitet werden.

Verfasst: 16.10.2011, 23:09
von Rem
Klar könnte ich jetzt nen 301 seiten aber das würde nur gehen, wenn ich zu jeder site eine eigene erstelle aber wer schafft das?
Ein Tipp: wenn da ein Ordner mit den Seiten vorhanden war wie z.B.
domain.de/html/

dann könntest Du den ganzen Ordner "html" umleiten:
RewriteRule ^html/(.*)$ /? [R=301,L]

Also hier einmal auf die Einstiegsseite...

Davon wäre
domain.de/neu/
oder auch
domain.de/index.htm
nicht betroffen...

Vielleicht wäre auch die umgekehrte Logik möglich, nämlich, dass eine Rewrite-Rule für den Ordner /neu/ und die index.htm nicht gilt. Da müsste Dir aber ein Profi weiterhelfen. Müsste bestimmt irgendwelche Conditions dafür geben...