Seite 1 von 1

Problem mit htaccess / mod_rewrite für Relaunch

Verfasst: 13.06.2009, 21:54
von servantez
Hallo,

ich habe folgendes Problem, was ich auch nach viel Probieren und Forschen nicht lösen kann:

Aktuell gibt es auf einer meiner Websites Aufrufe wie z.B.

https://www.website.de/index.php?query=abc
(nach Eingabe von "abc" in einem Formular)

Nun will ich das optimieren, so daß der Aufruf ist:

https://www.website.de/definition/abc.html

Das geht auch problemlos mit:

Code: Alles auswählen

RewriteEngine on 
Options +FollowSymlinks
RewriteBase /
RewriteRule definition/(.*)\.html /index.php?query=$1
Nun will ich aber gleichzeitig den Suchmaschinen einen 301 für die alten index.php Aufrufe (aus dem G**gle Index) mitgeben, damit ich keinen Duplicate Content erzeuge. Das geht letztlich auch mit:

Code: Alles auswählen

RewriteRule ^/index.php?query=(.*)$ /redirectold.php?query=$1
redirectold.php

Code: Alles auswählen

<?php
$query = $_GET&#91;"query"&#93;;
header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
header&#40;"Location&#58; http&#58;//www.website.de/definition/" . $query . ".html"&#41;;
exit&#40;&#41;;
?>
Problem ist hier natürlich, daß es eine Endlosschleife gibt.

Meine Frage ist also:

Wie kann ich die 301 für die alten Anfragen und gleichzeitig ordentliche URLs erreichen?

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen kann.

Vielen Dank!

Verfasst:
von

Verfasst: 14.06.2009, 21:15
von servantez
Hmmm... gar niemand?

Verfasst: 14.06.2009, 23:06
von TBT
in $_SERVER['REQUEST_URI'] steht die Original Anforderung an den Server drin, also entweder die alte mit query=... oder die bereits umgeschriebene.
Daran kannst du entscheiden, ob deine redirectold.php überhaupt was machen soll

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: 15.06.2009, 14:02
von servantez
TBT hat geschrieben:in $_SERVER['REQUEST_URI'] steht die Original Anforderung an den Server drin, also entweder die alte mit query=... oder die bereits umgeschriebene.
Daran kannst du entscheiden, ob deine redirectold.php überhaupt was machen soll
Ahhh... das war ein super Hinweis! Ich habe es jetzt ganz einfach gelöst:

index.php

Code: Alles auswählen

<?php
$request = "/index.php?query=" . $_GET&#91;"query"&#93;;

if &#40;$_SERVER&#91;'REQUEST_URI'&#93; == $request&#41;
&#123;
  header&#40;"HTTP/1.1 301 Moved Permanently"&#41;;
  header&#40;"Location&#58; http&#58;//www.website.de/definition/" . $query . ".html"&#41;;
  exit&#40;&#41;;
&#125;

?>
.htaccess

Code: Alles auswählen

RewriteEngine on 
Options +FollowSymlinks
RewriteBase /

RewriteRule definition/&#40;.*&#41;\.html /index.php?query=$1   
Die redirectold.php habe ich ganz weggelassen.

Das funktioniert einwandfrei. Ich hoffe, daß damit auch die Suchmaschinen die korrekten 301 bekommen, aber ich denke so müsste es gehen.

Vielen Dank, TBT!