Seite 1 von 1

Redirect 301 Problem

Verfasst: 18.02.2007, 15:07
von ven
Hallo,

ich habe folgende URL's per Mod_Rewrite umgeschrieben:
https://www.kinder-archiv.de//index.php?list=latest
AUF: https://www.kinder-archiv.de/die-neusten-kinderseiten/

https://www.kinder-archiv.de/index.php?list=top
AUF: https://www.kinder-archiv.de/die-besten-kinderseiten/

Jetzt möchte ich eine permanente 301 Weiterleitung von der jeweils ersten URL auf die zweite.

Hasso hatte mir schon kurz geholfen, aber in der Rule scheint wohl noch ein kleiner Fehler zu sein, denn Momentan kommt die Meldung, dass dieser Aufruf nie beendet werden kann.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^list=(latest)$
RewriteRule ^index\.php$ /die-neusten-kinderseiten/? [R=301,L]
RewriteCond %{QUERY_STRING} ^list=(top)$
RewriteRule ^index\.php$ /die-besten-kinderseiten/? [R=301,L] 
Hier die URL zum alten Thread:
https://www.abakus-internet-marketing.d ... 38338.html

Grüße,
ven

Verfasst:
von

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

Verfasst: 18.02.2007, 16:09
von chris21
Und welcher Datei ist denn der Inhalt tatsächlich zu finden?

Ist er intern immer noch unter index.php?list=latest zu finden und darauf wird nur intern umgeleitet, wenn man /die-neuesten-kinderseiten/ aufruft?

Falls ja, wäre dieses Problem am einfachsten mit einem kleinen PHP-Codeschnipsel in der index zu meistern:

Code: Alles auswählen

<?php
$aufruf = $_SERVER&#91;"REQUEST_URI"&#93;;
if&#40;$aufruf == "index.php?list=latest"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-neuesten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125;
else if&#40;$aufruf == "index.php?list=top"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-besten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125;
?>
ganz am Anfang in die index.php einfügen.

dann per .htaccess:

Code: Alles auswählen

RewriteRule ^die-neuesten-kinderseiten/$ /index.php?list=latest
RewriteRule ^die-besten-kinderseiten/$ /index.php?list=top
Wichtig: kein R=301 Flag einfügen, damit intern, nicht extern weitergeleitet wird.

Ist jetzt ungetestet, vielleicht müssen wir da noch den einen oder anderen Fehler gemeinsam raussuchen... (Backslash für Sonderzeichen, etc)
:wink:

Verfasst: 18.02.2007, 18:01
von ven
Hallo,

der Inhalt ist immer noch in: index.php?list=latest
Ich möchte nur Weiterleiten damit man von den alten SERPS direkt auf die neue umgeschriebene URL kommt.

Ich habe deinen Code mal eingebaut, aber funktioniert leider nicht. Das dürfte aber auch mit dem Script zusammenhängen, denn in dem Sende ich unter TOP z.B. schon einen: header("HTTP/1.1 200 OK");. Weil der sonst einen 404 Error Header für die schon umgeschriebene URL sendet.

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: 18.02.2007, 18:12
von chris21
Hallo Ven,

einen 404 sollte nur gesendet werden, wenn die .htaccess nicht greift. Demnach müssten wir dort nochmal nach einem Fehler schauen. Beachte dabei, dass die von mir gepostete .htaccess anders aussieht, als vielleicht Deine bisherige Lösung.

Den HTTP/1.1 200 OK Header könntest Du sonst auch in einem

Code: Alles auswählen

else
&#123;
... Dein 200er Header
&#125;
nach den obigen if und else if Konditionen einfügen.


Aber zurück zur .htaccess: hast Du den Code von oben schon ausprobiert? Läuft da was schief, wenn ja, was für eine Fehlermeldung oder Statuscode?

Verfasst: 18.02.2007, 18:42
von ven
Ich hab den neuen Code in die .htaccess sowie in die index.php eingefügt. Wenn ich jetzt auf:
https://www.kinder-archiv.de//index.php?list=latest
zugreife, ist habe ich die alte URL, aber richtigen Content
https://www.kinder-archiv.de/die-neusten-kinderseiten/
zugreife, habe ich die richtige URL, aber werde auf die Startseite weitergeleitet

Hier mal den Code der Index.php

Code: Alles auswählen

   switch &#40;$_REQUEST&#91;'list'&#93;&#41;
   &#123;
      case 'latest'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `DATE_ADDED` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die neusten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
		 
		 $aufruf = $_SERVER&#91;"REQUEST_URI"&#93;;
		 if&#40;$aufruf == "index.php?list=latest"&#41;
		 &#123;
		 header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
		 header&#40;"Status&#58; 301 Moved Permanently"&#41;;
		 header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-neuesten-kinderseiten/"&#41;;
		 header&#40;"Connection&#58; close"&#41;;
		 exit&#40;&#41;; 
		 &#125; 
		 else &#123;
		 header&#40;"HTTP/1.1 200 OK"&#41;;
		 &#125;
		  
         break;
      case 'top'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `HITS` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die besten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
         
		 $aufruf = $_SERVER&#91;"REQUEST_URI"&#93;;
		 if&#40;$aufruf == "index.php?list=top"&#41;
		 &#123;
		 header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
		 header&#40;"Status&#58; 301 Moved Permanently"&#41;;
		 header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-besten-kinderseiten/"&#41;;
		 header&#40;"Connection&#58; close"&#41;;
		 exit&#40;&#41;;
		 &#125; 
		 else &#123;
		 header&#40;"HTTP/1.1 200 OK"&#41;;
		 &#125;
		 
		 break;
      default&#58;
         http_redirect&#40;DOC_ROOT&#41;;
         break;
   &#125;

Verfasst: 18.02.2007, 18:51
von chris21
Könntest Du nicht den von mir eingebrachten Code direkt vor Deine SWITCH Anweisungen stellen, oder würde die dadurch behindert,? Ich sehe da gerade keine Hinderungsgründe.

Dann würde folgendes passieren: beim Aufruf von index.php?list=latest wäre die if Kondition wahr, damit würde per 301 auf /die-neuesten-kinderseiten/ umgeleitet, diese würde intern (ohne 301 o.ä.) wieder die index.php?list=latest aufrufen. Da dann die if Kondition nicht mehr wahr wäre, würde der nachfolgende Code ausgeführt, da sollte dann also erst die SWITCH ($_REQUEST["list"]); folgen.

Verfasst: 18.02.2007, 19:04
von ven
Okay, die neuen umgeschriebenen URL's klappen jetzt, die alten leiten aber wenn ich das richtig sehe nicht weiter.
https://www.kinder-archiv.de//index.php?list=latest
https://www.kinder-archiv.de/die-neusten-kinderseiten/

Der PHP-Code:

Code: Alles auswählen

$aufruf = $_SERVER&#91;"REQUEST_URI"&#93;;
if&#40;$aufruf == "index.php?list=latest"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-neusten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125;
else if&#40;$aufruf == "index.php?list=top"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-besten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125; 
else &#123;
header&#40;"HTTP/1.1 200 OK"&#41;;
&#125;
   
   switch &#40;$_REQUEST&#91;'list'&#93;&#41;
   &#123;
      case 'latest'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `DATE_ADDED` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die neusten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
		 header&#40;"HTTP/1.1 200 OK"&#41;;
         break;
      case 'top'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `HITS` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die besten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
		 header&#40;"HTTP/1.1 200 OK"&#41;;
		 break;
      default&#58;
         http_redirect&#40;DOC_ROOT&#41;;
         break;
   &#125;

Verfasst: 18.02.2007, 19:24
von kalamaris
Ich hab da mal ne Frage,

wenn ich mit
RedirectPermanent /datei.html /datei-2.html

weiterleite, wie wird das von Google bewertet?

301 oder 302? Wird PR mit vererbt muss da noch was dahinter wie [R=301,L] oder so etwas?

etwas Aufklärung würde mich beruhigen :wink:

mfg kalamaris

Verfasst: 18.02.2007, 19:26
von chris21
Ich wusste doch, dass ich da noch einen kleinen Fehler eingebaut hatte: vor das index.php in den if und else if Konditionen muss noch ein Slash, sonst deckt sich das nicht mit REQUEST_URI:

Da Du aus irgendeinem Grunde auch mit einem leeren Verzeichnis ( //index.php ) aufrufst, habe ich das gleich noch mit reingepackt

So wäre es richtig:

Code: Alles auswählen

$aufruf = $_SERVER&#91;"REQUEST_URI"&#93;;
if&#40;$aufruf == "/index.php?list=latest" || $aufruf == "//index.php?list=latest"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-neusten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125;
else if&#40;$aufruf == "/index.php?list=top" || $aufruf == "//index.php?list=top"&#41;
&#123;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Status&#58; 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.kinder-archiv.de/die-besten-kinderseiten/"&#41;;
header&#40;"Connection&#58; close"&#41;;
exit&#40;&#41;;
&#125;
else &#123;
header&#40;"HTTP/1.1 200 OK"&#41;;
&#125;
   
   switch &#40;$_REQUEST&#91;'list'&#93;&#41;
   &#123;
      case 'latest'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `DATE_ADDED` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die neusten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
       header&#40;"HTTP/1.1 200 OK"&#41;;
         break;
      case 'top'&#58;
         $links = $db->GetAll &#40;"SELECT * FROM `&#123;$tables&#91;'link'&#93;&#91;'name'&#93;&#125;` WHERE `STATUS` = '2' &#123;$expire_where&#125; ORDER BY `HITS` DESC LIMIT 0, ".LINKS_TOP&#41;;
         $path&#91;&#93; = array &#40;'ID' => '0', 'TITLE' => _L&#40;'Die besten Kinderseiten'&#41;, 'TITLE_URL' => '', 'DESCRIPTION' => ''&#41;;
       header&#40;"HTTP/1.1 200 OK"&#41;;
       break;
      default&#58;
         http_redirect&#40;DOC_ROOT&#41;;
         break;
   &#125;

Verfasst: 18.02.2007, 19:29
von chris21
@kalamaris: vollkommen falscher Thread, aber um Deine Frage gleich zu beantworten:

"redirect permanent" ist die mod_alias Entsprechung eines R=301 flags über mod_rewrite. Für Google ist es eine permanente Weiterleitung, 301 steht für nichts anderes.

Verfasst: 18.02.2007, 19:42
von ven
Tatsache, klappt wunderbar. Super vielen Dank chris :)